Overview
開放圖形庫(Open Graphics Library, OpenGL)是一種用於彩色呈現 3D、3D 向量圖形的跨語言、跨平台的 API。截至當下最新的版本為 2017.07.31 發布的 OpenGL 4.6,逐漸有應用程式移除 OpenGL,而改為使用 Vulkan。Vulkan 曾被稱為下一代的 OpenGL。
- OpenGL 與一般函式不一樣,不是呼叫 CPU 做某件事,而是在一個已經建構好的圖形管線(pipeline)中更改參數。
- OpenGL 常用應用在電腦圖形動畫、電影、工程設計、遊戲。也常拿來做為「電腦圖學」的學習工具,作為電腦圖學中 Rendering 的實現(也代表不一定要用 OpenGL)。
- OpenGL 可以透過 GPU 做運算,經過設計後可以進行平行運算。
OpenGL Rendering Pipeling
OpenGL Rendering Pipeline
Rendering Pipeline 代表一系列畫出圖形的過程,如上圖。透過在每個步驟套用不同的參數,最後繪出圖片,代表 OpenGL 的 Rendering Pipeline 中有大量的參數來設定每個步驟。
- Vertex Data(頂點資料):假設要將一個 3D 影像繪製到 2D 平面(螢幕)上,則需要先有 3D 影像的各個頂點資料,才能根據當前的攝影機位置(螢幕視角)繪製出結果,因此需要先有 Vertex Data。
- Vertex Pipeline:頂點資料的轉換。
- Fragment Pipeline:投影至顯示裝置(螢幕)的轉換。
- Frame Buffer:輸出
由於 3D 模型原則上可以透過無數的三角面所構成,所以只要會畫三角面,就可以畫出所有種類的東西。當然要用四角面也可以。
在電腦圖學中 Rendering 包含著 Geometry(幾何) 與 Rasterization(光柵化),在 OpenGL 中就是對應到 Vertex Pipeline 與 Fragment Pipeline。
- Geometry:幾何操作
- 首先定義物件的 Vertex(頂點)。
- 計算這些座標在螢幕上應該出現的位置。
- 例如頂點轉換,讓原始模型移動、旋轉、縮放到目標位置。並將其投影到相機視角。
- 接著根據使用者定義的方法,將各個頂點連成三角形。