GLUT,是指OpenGL Utility Toolkit,用于开发独立于窗口系统的OpenGL程序,即该库打包了很多的窗口操作,提供了独立于具体操作系统的API,让你快速的在OpenGL开发中完成窗口相关操作,如窗口显示、输入设备读取、多级级联菜单、多窗口管理等等便捷功能。
在windows中开发OpenGL,多基于VS环境,以VS 2015 社区版为例,介绍如何配置完整的GLUT开发环境。
GLUT相关二进制库下载
除了官方GLUT,还有freeglut, 详见:Sourceforge, GITHUB仓库。
GLUT 3.7版本下载:下载连接
GLUT 下载列表页面:下载列表,包含多种系统与版本,以及相关文档
GLUT Windows库内容
包含如下5个文件:
- glut.dll 动态链接库
- glut.h 头文件
- glut.lib 库文件
- glut32.dll 动态链接库
- glut32.lib 库文件
两个动态链接库文件glut.dll, glut32.dll
需要放入到系统drive目录内,
Windows 32位系统为:
C:\Windows\System32
Windows 64位系统为:
C:\Windows\SysWOW64
实际上,放在可执行文件同级目录下,也是可以的,如,VS项目的Debug/
,64位项目为x64/Debug/
。为了方便起见,最好放置到系统drive目录下,为了后期发布,则应当与项目放置在一起。
头文件 glut.h
头文件放置到系统头文件放置的位置,这其中有多个选择,目前VS安装后,配置的相关开发平台库都具有OpenGL相关头文件和库,所以,只需要找到OpenGL的头文件,放置到相同位置。OpenGL头文件包括了:GL.h, GLU.h
。
具体的位置,结合VS项目,将很容易获取到。
如:
C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl
Lib库文件 glut.lib, glut32.lib
Lib库文件与头文件放置位置差不多,只不过是放置到统一的Lib库中。可以通过查看OpenGL的库的位置,放置到相同位置。OpenGL库文件包括了:GlU32.Lib, OpenGL32.Lib
。
如·:
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64
通过VS提供的路径进行配置
创建一个空的VS VC空项目:
打开项目属性面板:
查看VC++目录的相关内容:
配置包括了:Debug/Release的32位和64位平台的相关内容,需要根据具体的路径,和项目类型,进行放置头文件、Lib文件的位置。
注意:dll文件,是根据本机系统类型,而非项目类型,因此,64位机就放入到C:\Windows\SysWOW64
,32位机就放到C:\Windows\System32
。
一个例程
#include<gl/glut.h>
#include<gl/glu.h>
#include<gl/gl.h>
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
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, (char**)argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 320);
glutCreateWindow("Hello OpenGL");
glutDisplayFunc(renderScene);
glutMainLoop();//enters the GLUT event processing loop.
return 0;
}
运行之后,看到黑色背景上,一个三角形,这是一个空间三角形:
OpenGL以点、线、三角形为基本元素类型,空间三角形是OpenGL中使用最多的基本类型。
为什么一定要这么配置
其实不一定要这么配置,尤其是GLUT,打开glut.h,可以看到这么一段:
#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */
#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
这里,链接glut32.lib,并没有指定具体的路径位置,所以,链接器会在Include Lib目录里找,因此需要放入到相应的Include目录。修改这个为相对路径或者绝对路径后,则无需如此放置。