opengl 学习第一天

来源:互联网 发布:在线起名字软件 编辑:程序博客网 时间:2024/06/05 23:35
今天是学习opengl的第一天(原来也看过opengl的一些知识点,但是没有上机code过),记录一下学习中出现的问题以及对应的解决方法,希望可以帮到遇到同样问题的同学,也记录自己的学习历程。
我是在windows上学习的,使用的是vs2013。

1.获取opengl开发中使用的两个.lib
学习opengl会用到两个库:GLFW 和 GLEW
GLFW:GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口 。下载官网:http://www.glfw.org/download.html
GLEW:OpenGL扩展库是个简单的工具,用于帮助C/C++开发者初始化扩展(OpenGL扩展功能)并书写可移植的应用程序。GLEW当前支持各种各样的操作系统,包含Windows,Linux,Darwin,Irix与Solaris。下载官网:http://glew.sourceforge.net/index.html
最好下载源码,源代码编译库可以保证生成的库是兼容你的操作系统和CPU的。
编译源码可以使用CMake。 官网:https://cmake.org/download/ 如何使用cmake编译源码,请搜索相关文章。
编译完成后, 复制编译生成的库和include文件夹放到你自己想使用的目录下。
2.创建工程
用vs创建一个空的工程(我使用的语言是c++),然后导入上面生成的两个.lib和include里面包含的文件。


3.第一个opengl demo的代码
// GLEW//#define GLEW_STATIC //注意这个宏注释掉了#include <GL/glew.h>// GLFW#include <GLFW/glfw3.h>#include <iostream>const GLuint WIDTH = 800, HEIGHT = 600;int main(){glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "first opengl test", nullptr, nullptr);if (!window){std::cout<<"failed to create window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glewExperimental = true;auto err = glewInit();if (err!=GLEW_OK){auto str=glewGetErrorString(err);std::cout << "failed to init glew" << std::endl;return -1;}int width, height;glfwGetFramebufferSize(window, &width, &height);glViewport(0, 0, width, height);while (!glfwWindowShouldClose(window)){glfwPollEvents();glClearColor(0.0, 0, 0.5, 1.0);glClear(GL_COLOR_BUFFER_BIT);glfwSwapBuffers(window);}glfwTerminate();return 0;}
运行结果如下图:

说说我在这段代码中遇到的问题:
1. glfwCreateWindow创建的窗口一直为null,经过查找是
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);(设置使用的opengl主版本号)与
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3)(设置使用的opengl次版本号);指定的opengl版本号我的电脑不支持。
解决方法:查看电脑支持的opengl版本,工具http://pan.baidu.com/s/1slb79md
我的是笔记本,开始查看时只支持到opengl3.1,经过查找自己的独立显卡最高可以支持到opengl4.3的,我升级了显卡驱动,发现依然只支持到3.1,又搜索了下 ,由于是双显卡(我的情况是电脑默认使用的集显)将显卡设置成独显就好了,设置方法:控制面板 — NVIDIA控制面板,全局改为高性能
这样就可以创建成功window了。

2.glewExperimental = true;一直链接出错
我查了下库的导入没有问题,不应该link error的,仔细检查代码发现应该是
#define GLEW_STATIC 的问题 当时参考的资料它使用的是glew32s.lib静态库
而我使用的是glew32.lib不是静态库,注释掉这个宏定义就好了。(如果使用的是静态库,要加上这个宏定义)。

3.glfwMakeContextCurrent(window);这句话要再glewinit() 之前 否则glewinit()会初始化失败

0 0
原创粉丝点击