glu 、glut 、freeglut与glew 作用

本文深入探讨OpenGL的初始化过程,包括上下文环境的创建及函数定位。介绍了freeglut和glew库如何简化这一过程,使开发者能在不同平台上轻松创建OpenGL窗口并调用所需函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

glu是实用库,包含有43个函数,函数名的前缀为glu。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。
glaux是OpenGL辅助库,包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。
glut是实用工具库,基本上是用于做窗口界面的,并且是跨平台(所以有时你喜欢做简单的demo的话,可以光用glut就ok了)

一,为什么需要freeglut和glew

    OpenGL官方文档中提到:
    Before you can actually use OpenGL in a program, you must first initialize it. Because OpenGL is platform-independent,
there is not a standard way to initialize OpenGL; each platform handles it differently. Non-C/C++ language bindings can also
 handle these differently.There are two phases of OpenGL initialization. The first phase is the creation of an OpenGL context;
the second phase is to load all of the necessary functions to use OpenGL. Some non-C/C++ language bindings merge these into one.
    大概意思就是说,在你真正能够在程序中使用OpenGL之前,你需要对他进行初始化,但是由于OpenGL是跨平台的,所以也没有一个标准的方式
进行初始化。OpenGL初始化分为两个阶段:
    第一个阶段,你需要创建一个OpenGL上下文环境,这个上下文环境存储了所有与OpenGL相关的状态(OpenGL是一个状态机),上下文位于操作
系统中某个进程中,一个进程可以创建多个上下文,每一个上下文都可以描绘一个不同的可视界面,就像应用程序中的窗口;简单来理解就是为了创建
一个窗口;
    第二个阶段,你需要定位所有需要在OpenGL中使用的函数,这是为什么呢?后面会继续讨论;
    自然,freeglut和glew就是用来解决这两个问题的;
二,freeglut的作用
    因为OpenGL是跨平台的,这给开发者带来了方便,但是在创建上下文时这也是一个麻烦的地方,因为不同平台的窗口系统和API都是不一样的
,freeglut就是一个openGL的工具库,封装了各个平台初始化窗口的过程,开发者只需要调用这个库中的初始化函数即可创建一个上下文;
三,glew的作用
    因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的
位置都无法在编译时确定下来,需要在运行时查询。任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指
针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:

// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);


    你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,
其中GLEW是目前最新,也是最流行的库。
--------------------- 
作者:Qice 
来源:优快云 
原文:https://blog.youkuaiyun.com/z_dmsd/article/details/70949102 
 

在VS2022中配置FreeGLUTGLEW可以使你在Visual Studio环境中顺利地使用OpenGL进行图形程序开发。以下是详细的步骤: ### 步骤一:下载必要的库文件 1. **下载 FreeGLUT**: - 访问 [FreeGLUT 官方网站](https://www.transmissionzero.co.uk/software/freeglut-devel/) 或其他可靠的来源,下载适用于Windows的预编译二进制包。 2. **下载 GLEW**: - 前往 [GLEW 官方网站](http://glew.sourceforge.net/) 下载最新的稳定版本,并选择适合Windows平台的预编译二进制文件。 ### 步骤二:解压并组织项目结构 将两个库分别解压缩到指定目录下,例如 `C:\Libraries\` 。这一步主要是为了方便后续设置路径引用。 ### 步骤三:添加包含路径、链接库以及依赖项至 VS 项目属性页 #### 创建新的空控制台应用程序作为测试工程。 打开你想集成这两个库的解决方案,在资源管理器里右键点击你的项目名称 -> 属性 (Properties) ,按如下操作调整相应的选项卡内容: - **C/C++ > General > Additional Include Directories** 添加这两行: ``` C:\Libraries\FreeGLUT\include; C:\Libraries\GLEW\include; ``` - **Linker > General > Additional Library Directories** 输入对应的静态或动态连接库所在位置,比如: ``` C:\Libraries\FreeGLUT\Lib\x64; C:\Libraries\GLEW\lib\Release\x64; ``` - **Linker > Input > Additional Dependencies** 将下列依赖加入其中(注意区分Debug版和Release版): 对于 Debug 版本: ``` freeglutd.lib; # 如果有debug版本的freeglutglew32sd.lib; opengl32.lib; glu32.lib; winmm.lib; gdi32.lib; ``` 对于 Release 版本: ``` freeglut.lib; glew32s.lib; opengl32.lib; glu32.lib; winmm.lib; gdi32.lib; ``` > 注意:如果你遇到任何关于未找到特定符号的问题,则可能是由于选择了错误类型的运行时(/MT vs /MD),确保所有库都是一致构建方式(即要么全是调试模式下的库,要么全部是发布模式下的)。 完成上述配置之后就可以编写简单的代码来检验是否成功了! ```cpp #define GLEW_STATIC // Use static linking for GLEW if you linked with the static library. #include <GL/glew.h> #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glutSwapBuffers(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutCreateWindow("Test Window"); glewInit(); // Initialize GLEW after creating an OpenGL context. glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 如果一切正常的话,你应该能够看到一个窗口里面画了一个三角形。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值