OpenGL自制3D游戏引擎入门II

GLFW窗口

  1. 试运行GLFW,没有报错即配置正确

     int main()
     {
         glfwInit();
         glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//主版本号
         glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//次版本号
         glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    
         //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
         //MAC开发需要声明这一行
    
         return 0;
     }
    
  2. 创建窗口对象

     //Open GLFW Window
     GLFWwindow* window = glfwCreateWindow(800, 600, "MyWindow", NULL, NULL);//前三个参数分别为宽、高、窗口名称
     if (window == NULL)
     {
         std::cout << "Open window failed" << std::endl;
         glfwTerminate();
         return -1;
     }
     glfwMakeContextCurrent(window);
    
  3. 初始化GLEW

     //	Init GLEW
     glewExperimental = true;
     if (glewInit() != GLEW_OK)
     {
         std::cout << "Init GLEW failed" << std::endl;
         glfwTerminate();
         return -1;
     }
    
  4. 视口

     glViewport(0, 0, 800, 600);
     //前俩参数为锚点,后俩为渲染窗口的宽高
    
  5. 渲染循环

     while (!glfwWindowShouldClose(window))
     {
         glfwSwapBuffers(window);
         glfwPollEvents();
     }
    
    • glfwWindowShouldClose函数每次循环时检查一次GLFW是否被要求退出
    • glfwPollEvents函数检查是否触发事件并调用对应的回调函数
    • glfwSwapBuffers函数交换颜色缓冲
  6. 双缓冲(Double Buffer):目的是解决图像闪烁问题,前缓冲保存最终输出的图像,显示在屏幕上,后缓冲执行渲染指令,所以渲染指令执行完毕后,交换前后缓冲,图像就可以立即显示,消除闪烁问题。

  7. 输入

     void processInput(GLFWwindow* window)
     {
         if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
         {
             glfwSetWindowShouldClose(window, true);
         }
     }
    
  8. 自定义一个processInput函数,放入循环中来完成输入操作,渲染循环中的操作一般分为以下三个部分

     while(!glfwWindowShouldClose(window))
     {
         // 输入
         processInput(window);
    
         // 渲染指令
         ...
    
         // 检查并调用事件,交换缓冲
         glfwPollEvents();
         glfwSwapBuffers(window);
     }
    
  9. 渲染

     glClearColor(0.7f, 0, 0, 1.0f);//RGBA
     glClear(GL_COLOR_BUFFER_BIT);
    

使用一个自定义的颜色清空屏幕,我们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值,所以我们只清空颜色缓冲

(下接OpenGL入门III)

Avian Romance Pid:54238596


OpenGL自制3D游戏引擎入门II
https://baifabaiquan.cn/2021/03/04/OpenGL入门II/
作者
白发败犬
发布于
2021年3月4日
许可协议