1.软件安装与配置
1.1基础配置
Vs2010 +GLFW(
创建窗体)+GLAD(显卡opengl函数地址访问)
glfw+glad是目前OpenGl项目开发的一种常用组合方式
,
glfw 官网 example也是这种组合方式。
其中,
GLFW用来创建窗体; GLAD用来获得显卡opengl函数地址
。
这是因为:
1).OpenGL是渲染2D、3D矢量图形硬件的一种
软件接口
,但
OpenGL
只提供了绘图功能,创建窗口是需要自己完成的
。这就需要学习相应操作系统的创建窗口方法,比较复杂,并且每个操作系统都不同。为简化创建窗口的过程,
可以使用专门的窗口库,例如
GLUT
、GLFW
等
。由于
GLUT
已经是
90
年代
的东西了(不过
后来还有
freeglut
),而
GLFW
是新的,因此建议使用GLFW
。
2).
因为
OpenGL
只是一个标准
/
规范,具体的实现是由驱动开发商针对特定显卡实现的。由于
OpenGL
驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法
因平台而异
,以
Windows
为例,非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中
GLAD
是目前最新,也是最流行的库。
参考网址
各类之间的关系简介
OpenGL之gult/freeglut/glew/glfw/glad的联系与区别_无名小卒000001的博客-CSDN博客_freeglut glfw
OpenGL入门教程
https://blog.csdn.net/xiangzhihong8/article/details/84776943?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165061786516782184628461%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165061786516782184628461&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-84776943.142^v9^pc_search_result_cache,157^v4^control&utm_term=OpenGL&spm=1018.2226.3001.4187
GLFW+GLAD配置
https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad
1.2GLFW配置
参考网址
[OpenGL]配置GLFW(超详细):
[OpenGL]配置GLFW(超详细) – collectionne – 博客园
GLFW+GLAD配置:
https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad
-
使用步骤:库编译+
IDE
工程配置
通过库编译,生成适用的库文件:
- 官网下载GLFW源码;
- Cmake生成VS工程文件;
- 打开Cmake生成的工程文件;
- 将任一example工程设为为启动项;
- 开始编译,编译结束后在build\src\Debug中出现glfw3.lib文件;
库生成完毕之后,我们需要让
IDE
知道库和头文件的位置:
-
建立一个新的目录,如
C:\Program Files (x86)\OpenGl
,里面包含
lib
和
Include
文件夹,用以存放
OpenGL
工程用到的所有第三方库和头文件;
-
将
GLFW
的头文件目录
GLFW
和
deps
拷贝至
include
文件中;将
lib
文件拷贝至
lib
文件夹中;
-
设置
IDE
的路径和依赖的库文件
glfwlib
1.3
GLAD配置
参考网址
[OpenGL]配置GLFW(超详细):
[OpenGL]配置GLFW(超详细) – collectionne – 博客园
GLFW+GLAD配置:
https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad
使用步骤:源文件获取+
IDE
工程配置
1).
打开
GLAD
的
在线服务
,将语言
(Language)
设置为
C/C++
,在
API
选项中,选择
3.3
以上的
OpenGL(gl)
版本(我们的教程中将使用
3.3
版本,但更新的版本也能用)。之后将模式
(Profile)
设置为
Core
,并且保证选中了
生成加载器
(Generate a loader)
选项。现在可以先(暂时)忽略扩展
(Extensions)
中的内容。都选择完之后,点击
生成
(Generate)
按钮来生成库文件。
2).GLAD
现在应该提供给你了一个
zip
压缩文件,包含两个头文件目录,和一个
glad.c
文件。将两个头文件目录(
glad
和
KHR
)复制到你的
Include
文件夹中(或者增加一个额外的项目指向这些目录),并添加
glad.c
文件到你的工程中。
3).
经过前面的这些步骤之后,你就应该可以将以下的指令加到你的文件顶部了:
#
include
<glad/glad.h>
点击编译按钮应该不会给你提示任何的错误。
经上述配置后,就可以
使用
GLFW
和
GLAD
来设置
OpenGL
上下文并创建一个窗口。
2.第一个窗口示例
参考网址
示例释义
/** 1.初始化GLFW**/
glfwInit();
/** 2.配置GLFW **/
/* 告知GLFW,OPENGL版本号 3.3 */
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
/* 告知GLFW,使用的是核心模式*/
//明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集(没有我们已不再需要的向后兼容特性)
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
/** 3.创建窗口 **/
/* 函数名:长、宽、名,最后两个参数暂时忽略*/
GLFWwindow* window = glfwCreateWindow(800, 600, “LearnOpenGL”, NULL, NULL);
if (window == NULL)
{
std::cout << “Failed to create GLFW window” << std::endl;
glfwTerminate();
return -1;
}
/** 4.通知GLFW,将所创建的窗口的上下文设置为当前线程的主上下文了**/
glfwMakeContextCurrent(window);
/** 5.GLAD初始化 **/
/*GLAD是用来管理显卡的OpenGL函数指针的,所以在调用任何OpenGL的函数之前需要初始化GLAD*/
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << “Failed to initialize GLAD” << std::endl;
return -1;
}
/** 6.渲染窗口的尺寸大小,即视口(Viewport))设置**/
/*这样OpenGL才知道怎样根据窗口大小显示数据和坐标*/
/*OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换,将(-1,1)的NDC坐标转为屏幕像素坐标*/
/* 个人理解,其实是为光栅化提供依据*/
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);//窗口大小改变时Viewport设置
/** 7.渲染循环 **/
/* 希望程序在我们主动关闭它之前不断绘制图像并能够接受用户输入 */
/* (1)每次循环开始前检查一次GLFW是否被要求退出 */
while(!glfwWindowShouldClose(window))
{
/* (2)检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。*/
glfwSwapBuffers(window);
/* (3)双缓冲交换,使屏幕输出显示,类似于DirectDraw的blt*/
glfwPollEvents();
}
/** 8.渲染结束,释放资源**/
glfwTerminate();