1. 首页
    2. 图形学

    freeglut+glew+gltools配置详解

    环境: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;
          }

          效果:

    • 如果你需要现成的文件这里有打包好的文件:点击下载
    评分 0, 满分 5 星
    0
    0
    看完收藏一下,下次也能找得到
    • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
    • 文章链接:https://icebmji.com/blog/?p=197 [复制] (转载时请注明本文出处及文章链接)
    上一篇:
    :下一篇

    发表评论

    此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

    沙发空缺中,还不快抢~