OpenGL自身是一個巨大的狀態機(State Machine):一系列的變數描述OpenGL此刻應當如何執行。OpenGL的狀態通常被稱為OpenGL上下文(Context)。我們通常使用如下途徑去更改OpenGL狀態:設定選項,操作緩衝。最後,我們使用當前OpenGL上下文來渲染。
假設當我們想告訴OpenGL去畫線段而不是三角形的時候,我們通過改變一些上下文變數來改變OpenGL狀態,從而告訴OpenGL如何去繪圖。一旦我們改變了OpenGL的狀態為繪製線段,下一個繪製命令就會畫出線段而不是三角形。
當使用OpenGL的時候,我們會遇到一些狀態設定函式(State-changing Function),這類函式將會改變上下文。以及狀態使用函式(State-using Function),這類函式會根據當前OpenGL的狀態執行一些操作。只要你記住OpenGL本質上是個大狀態機,就能更容易理解它的大部分特性。
例如
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor函式是一個狀態設定函式,而glClear函式則是一個狀態使用的函式,它使用了當前的狀態來獲取應該清除為的顏色。
GLFW:是一個專門針對 OpenGL 的 C 語言庫,提供了渲染物體所需的最低限度的介面。其允許使用者建立 OpenGL 上下文,定義視窗引數以及處理使用者輸入,把物體渲染到螢幕所需的必要功能。(注意:OpenGL 並不規定視窗建立和管理的部分,這一部分完全交由 GLFW 來實現;還有其他類似的:GLUT 和 SDL 等)。
GLEW:由於 OpenGL 只是一種 標準/規範,並且是由驅動製造上在驅動中予以實現。OpenGL 的大多數函式在編譯時(compile-time)是未知狀態的,需要在執行時(run-time)來請求。GLEW 的工作就是獲取所需的函式的地址,並儲存在函式指標中供使用。(還有其他類似的:GLAD)。
SOIL:大多數圖形學處理的任務都需要讀取圖片到記憶體當中。當前存在著各種各樣的圖片格式,例如 jpeg, bmp, png 等等;SOIL 提供了將圖片載入到記憶體當中的功能,避免了因繁雜的圖片格式讀取問題。
GLM:提供了大量的矩陣變換,向量變換以及各種針對矩陣和向量的計算操作。
- 頂點陣列物件:Vertex Array Object,VAO
- 頂點緩衝物件:Vertex Buffer Object,VBO
- 索引緩衝物件:Element Buffer Object,EBO或Index Buffer Object,IBO
2D座標和畫素也是不同的,2D座標精確表示一個點在2D空間中的位置,而2D畫素是這個點的近似值,2D畫素受到你的螢幕/視窗解析度的限制。