freeglut+glew+gltools配置详解

2017年11月26日 9124点热度 0人点赞 0条评论
环境:win10 64位+vs2017+CMake3.10.0
  • freeglut的配置:
    1. 为什么使用freeglut:
      • OpenGL标准里并没有提供辅助操作和界面显示操作的功能,最先出现的是aux库,aux的目的是让人们在学习OpenGL的工程中不必为各种平台的环境的细枝末节而消耗精力,但aux的效果并没有想象的那么好,然后出现了glut库,glut是对aux的增强和替代,glut在各个平台得到广泛的支持和维护、扩展。但OpenGL发展速度飞快,glut并不是开源的,而且更新进度也跟不上,上一个版本还是1998年的。freeglut是一个开源的对旧GLUT的替代品
    2. 如何安装:
      • 下载: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;
        }
        
  • glew的配置
    1. 什么是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)。
    2. 安装:
      • 下载:glew的官方下载地址是:http://glew.sourceforge.net/ 目前的版本是2.1.0,最高支持OpenGL4.6
      • 编译:glew的压缩文件中自带已将整理好的vs工程,直接打开运行就行,这里注意有两个工程,glew_shared是动态库,一个是glew_static是静态库,使用release生成就可以了,其余的按照上面freeglut的操作方法执行就可以了。
      • 验证:
        在上面的代码中加入glew的头文件就可以了,注意需要将glew的头文件放在glut的头文件前。
  • gltools的配置
    1. 什么是gltools
      • gltools是包含了用于操作矩阵和向量的3d数学库,并依靠glew获得OpenGL3.3中用来产生和渲染一些简单3d对象的函数,以及对视觉平截头体、相机类和变换矩阵管理的函数支持。就是说gltools是一个依托于glew工具库。
    2. 安装:
      • 下载:gltools目前托管在github平台上:地址是https://github.com/HazimGazov/GLTools 直接下载,或者用git下载都可以
      • 编译:gltools的编译应该会出现一些问题,
        1. 可能会遇到如图所示的问题,此时我们需要按着提示,选择glut的头文件目录和静态库
        2. 再会遇到下一个提示缺少,接着选择glew的静态库,将M_LIBRARY置空就可以了,点击生成就可以了
        3. 这时还需要将glew工程中的glew.c文件拷贝到gltools的src目录下,然后行了,使用方法和前面的一样。
      • 验证:使用下面的代码试试吧
      • // 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;
        }

        效果:

  • 如果你需要现成的文件这里有打包好的文件:点击下载

icebmji

这个人很懒,什么都没留下