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

张开发
2026/4/9 19:44:29 15 分钟阅读

分享文章

初学OpenGL3.3(1)--窗口
一.创建窗口1.1所需头文件这是创建窗口并为后续项目所需的头文件1.2创建main函数在写好项目所需的头文件后我们开始创建我们的main函数,这个main函数将会帮助我们实例化一个窗口下面我们来一一分析各句代码的功能这句代码是为了帮助我们初始化GLFW(一个专门针对OpenGL的C语言库它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入)然后我们可以使用glfwWindowHint函数来配置GLFW,它的第一个参数用来创建OpenGL上下文的配置选项,其中GLFW_CONTEXT_VERSION_MAJOR和GLFW_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

更多文章