一、 搭建opengl开发环境

今天是学习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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值