环境:win10 64位+vs2017+CMake3.10.0
-
freeglut的配置:
- 为什么使用freeglut:
- OpenGL标准里并没有提供辅助操作和界面显示及操作的功能,最先出现的是aux库,aux的目的是让人们在学习OpenGL的工程中不必为各种平台的环境的细枝末节而消耗精力,但aux的效果并没有想象的那么好,然后出现了glut库,glut是对aux的增强和替代,glut在各个平台得到广泛的支持和维护、扩展。但OpenGL发展速度飞快,glut并不是开源的,而且更新进度也跟不上,上一个版本还是1998年的。freeglut是一个开源的对旧GLUT的替代品。
- 如何安装:
- 下载:freeglut的官方网站:http://freeglut.sourceforge.net/ 可以到官方网站去下载freeglut的最新版,截止到我写这篇文章,freeglut的最新版是3.00,最新版的压缩文件中并没有提供直接的vs工程,需要自己生成工程。
- 编译:使用CMake 生成freeglut的生成应该是没有错误的,然后使用vs打开生成的解决方案,解决方案里有27个项目,其中freeglut是动态库的版本,freeglut_static是生成静态库的版本,其余的是实例演示和全局生成。编译release版静态库和动态库,静态库只有一个freeglut_static.lib文件,动态库生成一个freeglut.lib和一个freeglut.dll
- 使用:无论是使用静态库还是动态库都需要将freeglut的头文件加入到所在工程的包含目录中,或者vc++的包含目录,亦或windows的包含目录。其中静态库的使用方法需要在预编译头中加入定义FREEGLUT_STATIC或者直接在程序中定义也可以,像#define FREEGLUT_STATIC这样,然后将所需的lib文件所在目录加入工程的库目录,在将freeglut_static.lib加入到附加依赖项中,或者直接在程序中定义#pragma comment(lib,"freeglut_static.lib")。而动态库版的需要将生成的freeglut.dll,64位加入到C:/windows/syswow64中,32位加入到C:/windows/system32中即可。
- 验证:使用下面的代码测试一下安装是否成功了吧
#include <gl/glut.h> void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个OpenGL程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; }
- 为什么使用freeglut:
-
glew的配置
- 什么是glew:
- GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数函数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识 别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全 部函数。GLEW支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
- 安装:
- 下载:glew的官方下载地址是:http://glew.sourceforge.net/ 目前的版本是2.1.0,最高支持OpenGL4.6
- 编译:glew的压缩文件中自带已将整理好的vs工程,直接打开运行就行,这里注意有两个工程,glew_shared是动态库,一个是glew_static是静态库,使用release生成就可以了,其余的按照上面freeglut的操作方法执行就可以了。
- 验证:
在上面的代码中加入glew的头文件就可以了,注意需要将glew的头文件放在glut的头文件前。
- 什么是glew:
-
gltools的配置
- 什么是gltools:
- gltools是包含了用于操作矩阵和向量的3d数学库,并依靠glew获得OpenGL3.3中用来产生和渲染一些简单3d对象的函数,以及对视觉平截头体、相机类和变换矩阵管理的函数支持。就是说gltools是一个依托于glew工具库。
- 安装:
- 下载:gltools目前托管在github平台上:地址是https://github.com/HazimGazov/GLTools 直接下载,或者用git下载都可以
- 编译:gltools的编译应该会出现一些问题,
- 可能会遇到如图所示的问题,此时我们需要按着提示,选择glut的头文件目录和静态库
- 再会遇到下一个提示缺少,接着选择glew的静态库,将M_LIBRARY置空就可以了,点击生成就可以了
- 这时还需要将glew工程中的glew.c文件拷贝到gltools的src目录下,然后行了,使用方法和前面的一样。
- 可能会遇到如图所示的问题,此时我们需要按着提示,选择glut的头文件目录和静态库
- 验证:使用下面的代码试试吧
-
// Triangle.cpp // Our first OpenGL program that will just draw a triangle on the screen. #define GLUT_DISABLE_ATEXIT_HACK //#define FREEGLUT_STATIC #define WIN32 #include // OpenGL toolkit #include // Shader Manager Class #include <gl/glut.h> // Windows FreeGlut equivalent #pragma comment(lib,"glew32s.lib") #pragma comment(lib,"gltools.lib") #pragma comment(lib,"freeglut.lib") //#pragma comment(lib,"freeglut_static.lib") //#pragma comment (linker, "/NODEFAULTLIB:MSVCRTD.lib") GLBatch triangleBatch; GLShaderManager shaderManager; /////////////////////////////////////////////////////////////////////////////// // Window has changed size, or has just been created. In either case, we need // to use the window dimensions to set the viewport and the projection matrix. void ChangeSize(int w, int h) { glViewport(0, 0, w, h); } /////////////////////////////////////////////////////////////////////////////// // This function does any needed initialization on the rendering context. // This is the first opportunity to do any OpenGL related tasks. void SetupRC() { // Blue background glClearColor(0.0f, 0.0f, 1.0f, 1.0f); shaderManager.InitializeStockShaders(); // Load up a triangle GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f }; triangleBatch.Begin(GL_TRIANGLES, 3); triangleBatch.CopyVertexData3f(vVerts); triangleBatch.End(); } /////////////////////////////////////////////////////////////////////////////// // Called to draw scene void RenderScene(void) { // Clear the window with current clearing color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f }; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); triangleBatch.Draw(); // Perform the buffer swap to display back buffer glutSwapBuffers(); } /////////////////////////////////////////////////////////////////////////////// // Main entry point for GLUT based programs int main(int argc, char* argv[]) { gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("Triangle"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); return 0; }
效果:
- 什么是gltools:
- 如果你需要现成的文件这里有打包好的文件:点击下载