title: OpenGL(2)窗口
date: 2020-06-28 10:07
category: 圖形學
tags: opengl
鏈接:OpenGL(2)窗口
1. 視口
在開始渲染之前有一件重要的事情要做,就是告訴OpenGL渲染窗口的尺寸大小,即視口(Viewport).
這樣OpenGL才能知道怎樣根據窗口大小來顯示數據和座標,通過glViewPort函數來設置窗口的維度
glViewPort(0,0,800,600);
glViewPort函數前兩個參數控制窗口左下角的位置,第三個和第四個參數控制渲染窗口的寬度和高度(像素)。
OpenGL使用glViewport中定義的位置和寬高進行2D座標的轉換,將OpenGL中的位置座標轉換爲屏幕座標,假如OpenGL中的座標(-0.5,0.5)被映射爲屏幕中的座標(200,450),處理過的OpenGL座標範圍只爲-1到1,事實上就是將(-1,1)範圍內的座標映射到(0,800)和(0,600)
2. 渲染
2.1 渲染循環(Render Loop)
如果不希望只繪製一個圖像之後,應用程序就立即退出並關閉窗口,希望在主動關閉它之前不斷的繪製圖像,並能接受用戶輸入,需要在程序中添加一個while循環,讓窗口在退出前一直保持運行。
while(!glfwWindowShouldClose(window)){
glfwSwapBuffers(windo);
glfwPollEvents();
}
-
glfwWindowShouldClose:每次循環的開始前檢查一次GLFW是否被要求退出,如果是函數返回true,然後渲染循環結束,之後關閉應用程序。
-
glfwSwapBuffers:交換顏色緩衝,用來繪製,並且作爲輸出顯示到屏幕上
-
glfwPollEvents:檢查觸發什麼事件、更新窗口狀態,並調用對應的回調函數。
2.2 流程
將所有的渲染操作放在渲染循環中,讓渲染指令在每次渲染循環迭代中都能被執行。
while(!glfwWindowShouldClose(window)){
//輸入
processInput(window);
//渲染指令
//檢查並調用事件,交換緩衝
glfwPollEvents();
glfwSwapBuffers(window);
}
設置清屏顏色以及清空顏色緩衝:爲了加速渲染,避免看見上一次迭代的渲染結果;
glClear函數用來清空屏幕的顏色緩衝,接收一個緩衝位(Buffer bit)狀態使用函數
其中
GL_DEPTH_BUFFER_BIT: 深度緩衝
GL_STENCIL_BUFFER_BIT: 模板緩衝
GL_COLOR_BUFFER_BIT: 顏色緩衝
glClearColor函數來設置清空屏幕所用的顏色,整個顏色緩衝都會被填充爲glClearColor裏面所設置的顏色。狀態設置函數
glClearColor(0.3f,0.2f,0.3f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);