1. 程式人生 > IOS開發 >OpenGL學習(一)-- 術語瞭解

OpenGL學習(一)-- 術語瞭解

我的 OpenGL 專題學習目錄,希望和大家一起學習交流進步!


在學習 OpenGL 之前,我們先來了解一下涉及到的一些術語名詞。

1、渲染

將數學和圖形資料轉換成 3D 空間影象的操作叫做渲染(Rendering)。當這個術語作為動詞使用時,指的是計算機建立三維影象時所經歷的過程。它也作為名詞使用,指的僅僅是最終的影象作品。

2、變換(Transformation)和投影(Projection)

變換和投影.png
如上圖顯示的是用線條繪製的一個放置在一個平面上的立方體。

  • 變換: 通過 變換(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)邏輯操作

剪裁投影光柵化.png

著色: 沿著頂點之間改變顏⾊色值,能夠輕鬆建立光照照射到一個立方體的效果。著色器(Shader) 則是在圖形硬體上執行的單獨程式,用來處理頂點和執行光柵化任務。

紋理貼圖(Texture Mapping): 將紋理理圖⽚片附著到你繪圖的影象上。一個紋理就是一副用來貼到三角形或多邊形上的圖片。

混合(Blending): 顏⾊色混合效果。

4、狀態機

狀態機 就是一種存在於理論中的機器,它具有以下的特點:

  1. 它有記憶的能力,能夠記住自己當前的狀態。
  2. 它可以接收輸入,根據輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出。
  3. 當它進入某個特殊的狀態(停機狀態)的時候,它不再接收輸入,停止工作。

理論說起來很抽象,但實際上是很好理解的。 首先,從本質上講,我們現在的 電腦 就是典型的狀態機。可以對照理解:

  1. 電腦的儲存器(記憶體、硬碟等等),可以記住電腦自己當前的狀態(當前安裝在電腦中的軟體、儲存在電腦中的資料,其實都是二進位制的值,都屬於當前的狀態)。
  2. 電腦的輸入裝置接收輸入(鍵盤輸入、滑鼠輸入、檔案輸入),根據輸入的內容和自己的狀態(主要指可以執行的程式程式碼),修改自己的狀態(修改記憶體中的值),並且可以得到輸出(將結果顯示到螢幕)。
  3. 當它進入某個特殊的狀態(關機狀態)的時候,它不再接收輸入,停止工作。

OpenGL 也可以看成這樣的一種機器。讓我們先對照理解一下:

  1. OpenGL 可以記錄自己的狀態(比如:當前所使用的顏色、是否開啟了混合功能,等等,這些都是要記錄的)
  2. OpenGL 可以接收輸入(當我們呼叫 OpenGL 函式的時候,實際上可以看成 OpenGL 在接收我們的輸入),根據輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出(比如我們呼叫 glColor3f,則 OpenGL 接收到這個輸入後會修改自己的“當前顏色”這個狀態;我們呼叫 glRectf,則 OpenGL 會輸出一個矩形)
  3. OpenGL 可以進入停止狀態,不再接收輸入。這個可能在我們的程式中表現得不太明顯,不過在程式退出前,OpenGL 總會先停止工作的。

簡單總結就是:OpenGL 是一個 狀態機,它保持自身的狀態,除非使用者輸入一條命令讓它改變狀態。

轉載請備註原文出處,不得用於商業傳播——凡幾多