news 2026/5/10 19:58:56

初学OpenGL3.3(1)--窗口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初学OpenGL3.3(1)--窗口

一.创建窗口

1.1所需头文件

这是创建窗口并为后续项目所需的头文件

1.2创建main函数

在写好项目所需的头文件后我们开始创建我们的main函数,这个main函数将会帮助我们实例化一个窗口

下面我们来一一分析各句代码的功能

这句代码是为了帮助我们初始化GLFW(一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入)

然后我们可以使用glfwWindowHint函数来配置GLFW,它的第一个参数用来创建OpenGL上下文的配置选项,其中GLFW_CONTEXT_VERSION_MAJORGLFW_CONTEXT_VERSION_MINOR是用来设置OpenGL上下文的主版本号和次版本号,第二个参数表示的它们的版本,即3.3版本的OpenGL.而第三句代码是使用的是OpenGL的核心模式

上面这段代码我们创建了一个窗口对象,这个窗口对象我们,这个窗口对象里面存放了所有与窗口相关的数据,其中glfwCreatWindow这个函数的前两个参数是设置了窗口的宽和高,第三个参数表示的是我们这个窗口的名称,第四个参数中的NULL表示窗口化模式,第五个参数的NULL我们暂时忽略

这段代码是检查窗口是否创建成功,glewTerminate这个函数是用来终止GLFW的,glfwMakeContextCurrent(window);这个代码是用来为后续所有OpenGL渲染指令将作用于该窗口。

初始化GLEW的代码

glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。OpenGL使用glViewport中定义的位置和宽高进行2D坐标的转换,将OpenGL中的位置坐标转换为你的屏幕坐标。OpenGL中的坐标(-0.5, 0.5)有可能(最终)被映射为屏幕中的坐标(200,450)。注意,处理过的OpenGL坐标范围只为-1到1,因此我们事实上将(-1到1)范围内的坐标映射到(0, 800)和(0, 600)。

如果我们要频繁的调整窗口,那么我们就要使用void framebuffer_size_callback(GLFWwindow* window, int width, int height);和glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);来让GLFW每次再调整窗口时能够适应新的窗口

while(!glfwWindowShouldClose(window)) { glfwSwapBuffers(window); glfwPollEvents(); }

我们会把这个循环称为渲染循环,有了这个循环我们才能在想退出的时候退出,而不是等GLFW渲染一结束项目就结束了,下面我们依次来拆解这其中的代码

其中glfwWindowShouldClose这个函数在每次渲染结束时候,都会检查渲染是否会被退出秒如果是则返回true,while循环结束

glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。

glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。

在渲染结束时,我们通过调动这段代码来清除之前所分配的资源

1.3输入

在这段代码中我们通过绑定键盘按键实行了一个输入控制,当我们按下ESC键时系统会自动结束,将这个函数放到渲染循环中实现我们的功能

1.4渲染

glClear(GL_COLOR_BUFFER_BIT);

我们每次渲染通常不会希望看见上一次渲染结束时的结果,所以我们用上述函数使得每次循环清除上一次循环所得到的结果

glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

通过这个函数我们可以控制屏幕输出的颜色,前三个参数分别表示RGB(红绿蓝),最后一个参数表示透明度,f表示浮点数,范围在0至1之间.

本文参考:Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:56:50

单片机世界探秘:09 听懂模拟世界的声音——ADC模拟采集全攻略!

09 听懂模拟世界的声音——ADC模拟采集全攻略! 你的Arduino上次刚学会“说话”(UART),今天咱们给它安上一对超级灵敏的耳朵——ADC模拟采集! 从此它再也不是“数字呆瓜”,而是能听懂电位器“扭扭扭”、热敏电阻“热热热”、麦克风“啪啪啪”的感官小天才! 今天全程风趣…

作者头像 李华
网站建设 2026/4/16 1:11:11

2026届必备的六大AI辅助论文神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 毕业论文写作因人工智能技术的迅猛发展而有了全新工具,当下,AI能助力…

作者头像 李华
网站建设 2026/4/13 14:27:56

Windows 11终极优化指南:使用Win11Debloat实现系统性能提升

Windows 11终极优化指南:使用Win11Debloat实现系统性能提升 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…

作者头像 李华