任务
开始对OpenGL的学习,今天的任务是在VS2017中配置OpenGL的库(GLFW,GLEW)并创建第一个窗口。
搭建环境
1.获取GLFW库
从官方网站下载预编译的二进制版本和相应头文件,也可以下载源码包再进行编译(不建议)。
2.将GLFW链接进工程
工程属性(Project Properties) --> VC++目录 --> 包含目录/库目录 (如下图1)
将include目录(包含glfw.h)的地址加入包含目录中
将库目录(包含glfw.lib)的地址加入库目录中
工程属性-->连接器-->输入-->附加依赖项-->将库名称加入附加依赖项中(如下图2)
【图1】
【图2】
3.获取GLEW
从官方网站下载预编译的二进制版本和相应头文件,也可以下载源码包再进行编译(不建议)。
4.将GLEW链接进工程-----------同2
5.将glew32s.lib连接进工程----Visual Studio默认安装opengl32.lib库,直接加入附加依赖项即可。
代码实现
1 // GLEW 使用静态链接库 2 #define GLEW_STATIC 3 #include<GL/glew.h> 4 5 // GLFW 6 #include<GLFWglfw3.h> 7 8 #include<iostream> 9 using namespace std; 10 11 int main() 12 { 13 glewInit(); 14 // 初始化GLFW 15 glfwInit(); 16 // 配置GLFW--告诉GLFW使用OpenGL版本为3.3 17 // 确定主版本号(Mjaor) 18 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 19 // 确定副版本号 (Minor) 20 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 21 // 明确告诉GLFW使用核心模式,使用旧版函数将导致invalid operation(无效操作) 22 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 23 // 不允许用户调整窗口大小 24 glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 25 26 // 创建窗口对象,设定窗口宽,高,名称 nullptr--空指针 27 GLFWwindow* window = glfwCreateWindow(800, 600, "Hello,OpenGL", nullptr, nullptr); 28 if (window == nullptr) 29 { 30 std::cout << "Failed to create GLFW window" << std::endl; 31 glfwTerminate(); 32 return -1; 33 } 34 35 36 // 初始化GLEW 37 // 设置glewExperimental值为GL_TURE,是的GLEW在管理OpenGL的函数指针时更多使用现代化技术 38 // 如果设值为GL_FALSE的话可能会在使用OpenGL的核心模式时出现问题 39 glewExperimental = GL_TRUE; 40 if (glewInit() != GLEW_OK) 41 { 42 std::cout << "Faild to initialize GLEW" << std::endl; 43 return -1; 44 } 45 46 // 获取窗口尺寸,大小 47 int width, height; 48 glfwGetFramebufferSize(window, &width, &height); 49 // 告诉OpenGL渲染窗口的尺寸大小--前两个参数控制窗口左下角的位置--取值范围[-1,1],映射到屏幕坐标[0, 800], [0,600] 50 // 后两个参数控制渲染窗口的宽度和高度 51 glViewport(0, 0, width, height); 52 53 // glfwWindowShouldClose 检查GLFW是否被要求退出 54 while (!glfwWindowShouldClose(window)) 55 { 56 // 检测事件触发 57 glfwPollEvents(); 58 // 交换颜色缓冲(时一个储存GLFW窗口每一个像素颜色的大缓冲),在迭代中被用作绘制,并将输出显示在屏幕 59 glfwSwapBuffers(window); 60 } 61 62 glfwTerminate(); 63 return 0; 64 }
错误总结
1.获取glfw,glew库时,没必要下载源代码使用cmake编译,费时且效果不佳。
2.添加glew依赖项,库目录路径不对,报错如下。
3.与其他库的使用冲突,
解决:工程-->属性-->连接器-->输入-->忽略特定默认库 加入冲突的默认库名称
4.未链接opengl32.lib库,报错如下。
5.调试时,窗口闪退,报错类似如下。(部分解决)
解决:调试-->选项和设置 -->调试-->常规-->勾上启动原服务器支持-->常规-->符号-->勾选Microsoft符号服务器
原方案(https://blog.csdn.net/acliyu/article/details/78795869)
仍存在问题,如下,暂不能解决。