【OpenGL第一个程序】

时间:2024-05-31 10:37:56
#include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> using namespace std; void init(GLFWwindow* window) { } void display(GLFWwindow* window, double currentTime) { //! 指定清除背景时用的颜色 glClearColor(0.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); } int main(void) { //! GLFW初始化 if (!glfwInit()) { exit(EXIT_FAILURE); } //! 指定计算机必须与OpenGL4.3兼容 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); //! 创建GLFW窗口和相关的OpenGL上下文 //! 指定了窗口的宽和高,单位为像素;窗口的标题;后两个参数为允许全屏显示和资源共享 GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter 2 - program 1", NULL, NULL); //! 创建GLFW窗口不会自动将它与当前的OpenGL上下文关联起来,因此需要调用以下函数 glfwMakeContextCurrent(window); //! GLEW初始化 if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); } //! 开启垂直同步,因为GLFW窗口默认是双缓冲的 //! 双缓冲:有2个颜色缓冲区,一个用于显示,一个用于渲染。渲染整个帧后,将交换缓冲区,缓冲用于减少不良的视觉伪影 /*开启垂直同步, 如果它设定为60Hz(60FPS),那么我们就有60FPS。我们可以通过在glfwSwapInterval方法中设置高于1的数字来降低 这个速率(如果设置为2,将得到30FPS)。0:关闭垂直同步; 1:60FPS; 2:30FPS。*/ glfwSwapInterval(1); init(window); //! 当GLFW探测到应该关闭窗口的事件(比如点击x按钮),循环会终止 while (!glfwWindowShouldClose(window)) { //! 传入当前时间,保证动画在不同计算机以相同速度播放 display(window, glfwGetTime()); //! 开启垂直同步,交换缓冲区。 /*因为电脑绘图是一个个像素逐一画的,需要时间,如果单一缓冲,我们可能会看到具体绘画过程,会造成屏幕闪烁等问题,而我们用户不需要具体 看到你绘制的过程,所以为了解决这个问题,这里用了双缓冲技术,用两个内存区域来保存数据,分为前缓冲区和后缓冲区,前缓冲区用于展示屏幕 上的内容,而后缓冲区就用来绘制,然后每一帧开始的时候,将两个缓冲区交换,这样后缓冲区又可以画新的内容。*/ glfwSwapBuffers(window); //! 处理窗口相关事件,比如按键 glfwPollEvents(); } //! 销毁窗口,终止运行 glfwDestroyWindow(window); glfwTerminate(); exit(EXIT_SUCCESS); }