OpenGL之旅(2):簡單的創建一個窗口

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章