OpenGL學習(一)-- 術語瞭解
我的
OpenGL
專題學習目錄,希望和大家一起學習交流進步!
- OpenGL學習(一)-- 術語瞭解
- OpenGL學習(二)-- Xcode 搭建 OpenGL 環境
- OpenGL學習(三)-- OpenGL 基礎渲染
- OpenGL學習(四)-- 正面&背面剔除和深度測試
- OpenGL學習(五)-- 裁剪與混合
- OpenGL學習(六)-- 基礎紋理
- OpenGL學習(七)-- 基礎變化綜合練習實踐總結
- OpenGL學習(八)-- OpenGL ES 初探(上)
- OpenGL學習(九)-- OpenGL ES 初探(下)GLKit
- OpenGL學習(十)-- 著色語言 GLSL 語法介紹
- OpenGL學習(十一)-- 用 GLSL 實現載入圖片
- OpenGL學習(十二)-- OpenGL ES 紋理翻轉的策略對比
在學習 OpenGL 之前,我們先來了解一下涉及到的一些術語名詞。
1、渲染
將數學和圖形資料轉換成 3D 空間影象的操作叫做渲染(Rendering)。當這個術語作為動詞使用時,指的是計算機建立三維影象時所經歷的過程。它也作為名詞使用,指的僅僅是最終的影象作品。
2、變換(Transformation)和投影(Projection)
如上圖顯示的是用線條繪製的一個放置在一個平面上的立方體。
- 變換: 通過 變換(Transformation),或者說旋轉這些點,並在他們之間繪製線段,我們就能在平面的 2D
螢幕上創造出一個 3D 世界的錯覺。- 頂點: 這些點本身叫做 頂點(Vertices,單數為 Vertex),他們能通過一種稱為 變換矩陣(Transformation Matrix) 的數學結構進行旋轉。 另外還有一種矩陣叫 投影矩陣(Projection Matrix),用於將 3D 座標轉換成二維螢幕座標,實際的線條也將在二維螢幕座標上進行繪製。
- 投影(Projection): 用於建立幾何圖形的3D座標將投影到一個2D表面(視窗背景)。
- 正投影(Orthographic Projection)或平行投影: 物體在螢幕上的大小和實際大小相同,不管是遠還是近。
- 透視投影(Perspective Projection):遠處的物體看上去比近處的物體更小一些,在模擬和3D動畫中,這種投影能夠獲得最大程度的逼真感。
3、頂點、片元、圖元和光柵化
過程:頂點—> 圖元 —> 片元—> 畫素
頂點—> 圖元:
幾何頂點被組合為圖元(點,線段或多邊形),然後圖元被合成片元,最後片元被轉換為幀快取中的象素資料。
圖元 —> 片元:
圖元被分幾步轉換為片元:圖元被適當的裁剪,顏色和紋理資料也相應作出必要的調整,相關的座標被轉換為視窗座標。最後,光柵化將裁剪好的圖元轉換為片元。
- 1) 裁剪
- 2) 轉換到視窗座標
- 3) 光柵化
光柵化
是將一個圖元轉變為一個二維圖象(其實只是佈滿平面,沒有真正的替換幀快取區)的過程。二維圖象上每個點都包含了顏色、深度和紋理資料。將該點和相關資訊叫做一個 片元(fragment)。(這就是片元和畫素之間的關鍵區別,雖然兩者的直觀印象都是的畫素,但是片元比畫素多了許多資訊,在光柵化中紋理對映之後圖元資訊轉化為了畫素)
片元—> 畫素:
- 1)象素所有權(ownership)檢測
- 2)裁剪檢測
- 3)Alpha 檢測
- 4)模版檢測
- 5)深度檢測
- 6)融合
- 7)抖動
- 8)邏輯操作
著色: 沿著頂點之間改變顏⾊色值,能夠輕鬆建立光照照射到一個立方體的效果。著色器(Shader) 則是在圖形硬體上執行的單獨程式,用來處理頂點和執行光柵化任務。
紋理貼圖(Texture Mapping): 將紋理理圖⽚片附著到你繪圖的影象上。一個紋理就是一副用來貼到三角形或多邊形上的圖片。
混合(Blending): 顏⾊色混合效果。
4、狀態機
狀態機 就是一種存在於理論中的機器,它具有以下的特點:
- 它有記憶的能力,能夠記住自己當前的狀態。
- 它可以接收輸入,根據輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出。
- 當它進入某個特殊的狀態(停機狀態)的時候,它不再接收輸入,停止工作。
理論說起來很抽象,但實際上是很好理解的。 首先,從本質上講,我們現在的 電腦 就是典型的狀態機。可以對照理解:
- 電腦的儲存器(記憶體、硬碟等等),可以記住電腦自己當前的狀態(當前安裝在電腦中的軟體、儲存在電腦中的資料,其實都是二進位制的值,都屬於當前的狀態)。
- 電腦的輸入裝置接收輸入(鍵盤輸入、滑鼠輸入、檔案輸入),根據輸入的內容和自己的狀態(主要指可以執行的程式程式碼),修改自己的狀態(修改記憶體中的值),並且可以得到輸出(將結果顯示到螢幕)。
- 當它進入某個特殊的狀態(關機狀態)的時候,它不再接收輸入,停止工作。
OpenGL 也可以看成這樣的一種機器。讓我們先對照理解一下:
- OpenGL 可以記錄自己的狀態(比如:當前所使用的顏色、是否開啟了混合功能,等等,這些都是要記錄的)
- OpenGL 可以接收輸入(當我們呼叫 OpenGL 函式的時候,實際上可以看成 OpenGL 在接收我們的輸入),根據輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出(比如我們呼叫
glColor3f
,則 OpenGL 接收到這個輸入後會修改自己的“當前顏色”這個狀態;我們呼叫glRectf
,則 OpenGL 會輸出一個矩形)- OpenGL 可以進入停止狀態,不再接收輸入。這個可能在我們的程式中表現得不太明顯,不過在程式退出前,OpenGL 總會先停止工作的。
簡單總結就是:OpenGL 是一個 狀態機,它保持自身的狀態,除非使用者輸入一條命令讓它改變狀態。
轉載請備註原文出處,不得用於商業傳播——凡幾多