type
status
date
slug
summary
tags
category
icon
password
OpenGL并不是一个库,而是一种规范,显卡官方都是基于这种规范去开发的。OpenGL其实是一个巨大的状态机,通过一系列变量描述OpenGL应该怎么运行,开发者通过更改OpenGL的状态,然后根据当前的状态来渲染。
使用OpenGL必须要引用两个库,glfwglad
glfw作为专门针对OpenGL的C语言库,提供一系列渲染物体最低限度的接口,允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。
glad作为一个开源库,相当于OpenGL加载器。OpenGL有很多版本,很多函数的位置在编译时期无法确定下来,需要运行时查询,这使得程序编写会很繁琐,如果想要简化开发,就需要用到glad。打开这里的链接glad,通过定义一个版本生成一个gald库,下载后在程序中使用。
这里还用了imgui(ui库,这里用作交互控制),spdlog(高性能c++ log库)和glm(OpenGL使用的数学库)。
引用这两个库的头文件
首先需要初始化glfw,初始化的时候所有值都会被设为默认值
然后通过glfwWindowHint设置窗口的一些值
这些值都可以在官方文档找到,GLFW_CONTEXT_VERSION_MAJOR,GLFW_CONTEXT_VERSION_MINOR指定所创建的上下文必须兼容的客户端 API 版本。这些提示的具体行为取决于所请求的客户端 API。GLFW_OPENGL_PROFILE 指定为哪个 OpenGL 配置文件创建上下文,这里明确告诉glfw这里使用的是核心模式。
接下来创建一个窗口
glfwCreateWindow的第一个和第二个参数分别是窗口的宽和高,第三个参数是窗口名称。创建后将窗口的上下文设置为当前线程的上下文。
接下来初始化glad,
glfwGetProcAddress是glfw提供的函数,如果当前上下文支持,此函数将返回指定OpenGL 的地址。
开始渲染之前还需要知道OpenGL窗口的大小,即视口Viewport。第一二个参数是左下角的位置,第三四个参数控制渲染窗口的宽度和高度。
改变窗口大小的时候视口也应该调整,可以使用在glfw的glfwSetFramebufferSizeCallback注册回调函数去实现。
接下来开始渲染
glfwWindowShouldClose在每一帧开始前检查glfw是否被要求退出,如果是渲染将停止运行。
glfwSwapBuffers交换缓冲区。
glfwPollEvents检查触发的事件,比如键盘输入,调整窗口大小等。
如果需要处理输入,可以通过glfwGetKey进行简单的处理
可以通过glClear来清空屏幕的颜色缓冲。因为这里只关心颜色所以使用的GL_COLOR_BUFFER_BIT。可以先使用glClearColor设置清空缓冲的颜色
渲染结束后通过glfwTerminate释放/删除之前分配的资源
所有的代码如下
可以得到以下结果
notion image
 
[OpenGL]如何绘制一个三角形[C++]如何通过premake正确地配置Visual Studio
Loading...