WIN7 + VS2015环境下关于GLEW和GLFW的配置
2017-09-14 00:22
477 查看
前言
现在是OpenGL 4.5的时代,相对于 GLUT,GLEW 和 GLFW 显得更加的方便强大,但是如何实现配置和配置后出现BUG都是让人头疼的事情。笔者经过两天的不断尝试与查找资料,终于配置成功了。由于笔者也没有完全理解,所以我不确保这种方法适合于所有情况,只是希望给更多学习OpenGL的朋友提供一种方法。开始工作
一.
首先:笔者建议你先查看你的显卡是否支持OpenGL 4.5版本方法:百度下载GPU Caps Viewer
双击打开
点击上方红色圆圈中可看到OpenGL的支持信息(黄色方框内容),如果你可支持的版本较低,笔者建议你更新驱动
二.
下载GLEW和GLFW源码,下载地址分别为http://glew.sourceforge.net/
http://www.glfw.org/
下载CMake
https://cmake.org/
三.
cmake子目录bin中有一个cmake-gui.exe,双击打开得到以下界面
第一步,点击“Browsw source…”选择GLFW的根目录
第二步,点击“Browse build…”任意选取一个新建的文件夹作为输出目录
第三步,点击“Configure“,出现以下选择
选择Visual Studio 14 2015
第四步,出现以下界面时,点击“Generate”
稍等几秒,便可关闭CMake
四.
打开刚刚指定的Build目录(即你指定存放CMake输出的目录),用VS2015打开GLFW.sln文件进行编译(需知:笔者在配置时这一步是不成功的,但是也得到了我想要的链接库文件)在你的\bulid\src\Debug中会有一个lib文件。同时,你下载的glfw文件中有一个include文件夹,其中有一个存放着头文件的GLFW文件夹。至此配置GLFW的准备工作算是完成了
如果你实在不想动用CMake去做这么麻烦的工作的话,你也可以直接在网上下载glfw3.lib(此处滑稽:))
五.
进行glew的配置准备工作实际上是非常类似的,此处不再赘述,当然你还是可以直接在网上下载glew32.lib。需要注意的是:还需要一个glew32.dll文件,记得一同下载。重要的事情说三遍,注意 x 3 !然后把glew32.dll文件拷贝到C:\Windows\SysWOW64目录下。
笔者建议新建一个独立文件夹,里面新建两个文件夹include(A)和lib(B)。把glfw中的include文件夹里面的GLFW 和 glew中的include文件夹里面的GL都拷贝到A中,然后把glfw3.lib 和 glew32.lib放在B中。至此所以准备工作完成了,开始配置了
六.
①打开VS2015,新建项目,选择Win32控制台②选择空项目
③项目->属性->VC++目录。 包含目录中添加上刚才准备的A(见第五步),库目录中添加上刚才准备的B(见第五步)
④项目->属性->链接器->输入。附加依赖项中添加上 glew32.lib ; glfw3.lib ; opengl32.lib 。由于是手写的,所以注意拼写。当然你直接复制上去也行。
⑤最后点击确定便配置完成了
七.最终测试.
新建一个cpp文件,把以下代码拷贝到文件中。代码来自Anton’s OpenGL 4 Tutorials#include "stdafx.h" #include <GL/glew.h> //#define GLFW_DLL #include <GLFW/glfw3.h> int main(int argc, _TCHAR* argv[]) { // start GL context and O/S window using the GLFW helper library if (!glfwInit ()) { fprintf (stderr, "ERROR: could not start GLFW3\n"); return 1; } GLFWwindow* window = glfwCreateWindow (800, 600, "Hello Triangle", NULL, NULL); if (!window) { fprintf (stderr, "ERROR: could not open window with GLFW3\n"); glfwTerminate(); return 1; } glfwMakeContextCurrent (window); // start GLEW extension handler glewExperimental = GL_TRUE; glewInit (); // get version info const GLubyte* renderer = glGetString (GL_RENDERER); // get renderer string const GLubyte* version = glGetString (GL_VERSION); // version as a string printf ("Renderer: %s\n", renderer); printf ("OpenGL version supported %s\n", version); // tell GL to only draw onto a pixel if the shape is closer to the viewer glEnable (GL_DEPTH_TEST); // enable depth-testing glDepthFunc (GL_LESS); // depth-testing interprets a smaller value as "closer" float points[] = { 0.0f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f }; GLuint vbo = 0; glGenBuffers (1, &vbo); glBindBuffer (GL_ARRAY_BUFFER, vbo); glBufferData (GL_ARRAY_BUFFER, 9 * sizeof (float), points, GL_STATIC_DRAW); GLuint vao = 0; glGenVertexArrays (1, &vao); glBindVertexArray (vao); glEnableVertexAttribArray (0); glBindBuffer (GL_ARRAY_BUFFER, vbo); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, NULL); const char* vertex_shader = "#version 400\n" "in vec3 vp;" "void main () {" " gl_Position = vec4 (vp, 1.0);" "}"; const char* fragment_shader = "#version 400\n" "out vec4 frag_colour;" "void main () {" " frag_colour = vec4 (0.5, 0.0, 0.5, 1.0);" "}"; GLuint vs = glCreateShader (GL_VERTEX_SHADER); glShaderSource (vs, 1, &vertex_shader, NULL); glCompileShader (vs); GLuint fs = glCreateShader (GL_FRAGMENT_SHADER); glShaderSource (fs, 1, &fragment_shader, NULL); glCompileShader (fs); GLuint shader_programme = glCreateProgram (); glAttachShader (shader_programme, fs); glAttachShader (shader_programme, vs); glLinkProgram (shader_programme); // Loop until the user closes the window while (!glfwWindowShouldClose(window)) { // wipe the drawing surface clear glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram (shader_programme); glBindVertexArray (vao); // draw points 0-3 from the currently bound VAO with current in-use shader glDrawArrays (GL_TRIANGLES, 0, 3); // update other events like input handling glfwPollEvents (); // put the stuff we've been drawing onto the display glfwSwapBuffers (window); } // close GL context and any other GLFW resources glfwTerminate(); return 0; }
编译运行,成功的话,会实现以下窗口
第一行有可能报错,笔者上网查询后,把第一行代码删掉是可以的。
至此,如果你跟着所有步骤来做,一切顺利,没有意外的情况,且代码测试成功,那么恭喜你,完美配置成功。
不过……
对嘛,生活很难一帆风顺,吃个鸡蛋都有可能吃到蛋壳碎,这个程序有可能报许多错误,笔者来分享下个人的惨痛经历
第一种:一大堆错误如下
观察错误提示,你会发现不少glew,glfw,gl的字眼或前缀,这说明和我们的库有关。解决方法如下,添加最上面的3行代码
第二种:无法打开glew32.lib文件
出现这个情况一定要确保三点:
①项目配置时,库目录添加的文件夹中是否有glew32.lib
②项目配置时,附加依赖项是否有添加glew32.lib
③glew32.dll是否有拷贝到C:\Windows\SysWOW64目录下
再者glew32.lib文件是否损坏(这种情况一般都不会发生),如果确保了以上3点并重启过VS2015仍然报错,可尝试更换glew32.lib和glew32.dll文件
总结
这篇教程是我在网上查了许多资料,看了许多前辈的博客,再结合自身经历所写出来的,其中有许多知识笔者也是一知半解,也许存在着许多错误,不能保证每个人都可以成功配置,毕竟大家的计算机环境不尽相同。如果你在阅读过程中发现了错误,希望你能给我指正,相互学习。如果你按这个教程成功配置,那么说明我的努力是有一定价值的。最后希望各位想要学习OpenGL童鞋都能有一个好的开头。梦不可怕,可怕的是没有梦
相关文章推荐
- OpenGL环境配置 win10,vs2015,glew,freeglut, glm
- Win7 VS2015 NASM汇编语言环境配置
- Win10 VS2015 OpenGL + freeglut + glew + glm 环境配置
- VS2015配置OpenGL(glfw,glew)
- 关于VS2015C++环境配置问题
- VS2015 OpenGL开发环境简单配置 glfw + glad
- Win7 VS2015 NASM汇编语言环境配置
- VS 2015 + Qt 5.8 环境配置
- CUDA_by_examples示例julia成功运行环境配置过程(vs2015+CUDA8.0)
- Win7 64位环境下,vs2013和Opencv2.4.13的配置
- Win7、Win8系统下关于JDK1.7的安装与环境变量的配置(图例)
- openCV2.4.13+VS2015+Cmake开发环境配置,解决nonfree问题
- [OpenGL] OpenGL+VS2015环境配置
- VS2015安装+OpenGL环境配置及测试
- 关于win10 64位系统下vs2013与python2.7环境下caffe的配置工作入门工作总结
- win7 64位 vs2015+opencv3.2.0+cmake3.8.1+python27安装配置
- 在VS2015下配置基于OPENCV2.4.13的开发环境
- VC++ 19 (VS2015) 编译器系统环境变量配置
- VS2015配置内核WDK7600环境,32位下.
- 关于opencv3.3.0+vs2015 +x86debug版本配置方法