天天看點

OpenGL之旅(2)簡單的建立一個視窗1. 視口2. 渲染

title: OpenGL(2)視窗

date: 2020-06-28 10:07

category: 圖形學

tags: opengl

連結:OpenGL(2)視窗

1. 視口

在開始渲染之前有一件重要的事情要做,就是告訴OpenGL渲染視窗的尺寸大小,即視口(Viewport).

這樣OpenGL才能知道怎樣根據視窗大小來顯示資料和坐标,通過glViewPort函數來設定視窗的次元

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);