OpenGL ES系列二--管線渲染流程

OpenGL渲染管線

定義:渲染管線是一系列數據處理過程,並且將應用程序的數據轉換到最終渲染的圖像。下面是渲染管線流程圖:

這裏寫圖片描述

從上圖我們可以看出OpenGL首先接收用戶提供的幾何數據(頂點座標、頂點紋理等),並且將它輸入到一系列着色器階段中進行處理,包括頂點着色、細分着色、幾何着色,然後將它送入到光柵化單元。光柵化單元負責對所有剪切區域內的圖元生成片元數據,然後對每個生成的片元都執行一次片元着色器。看起來好像很複雜,但是我們並不需要用到所有的着色階段,事實上,只有頂點和片元着色器是必須的,細分和幾何是可選的。下面我們就對每一個階段進行詳細的解釋。

頂點數據

作爲OpenGL渲染管線的第一個步驟,我們主要是做一些數據準備,涉及的數據有頂點座標(必須)、頂點紋理座標、頂點法向量座標等,要傳哪些數據是根據我們的需求而定的,不過在這些數據裏面頂點座標是必須的。需要注意的是OpenGL要的頂點數據並不是簡單的像點A(1,2,3),我們需要在定義或者獲取到點數據之後將它轉化爲緩存對象。將頂點數據轉化爲緩存對象之後就可以傳遞並進入到下一階–段頂點着色器。

頂點着色器

頂點着色器的作用就是處理頂點相關的數據,它會對我們在頂點數據階段傳入的所有頂點進行單獨處理。在這裏頂點着色器可能很簡單也可能很複雜,簡單的像不做任何處理直接把數據傳給下一個階段;複雜的話就是做大量的數據處理,比如矩陣變換、顏色處理、紋理處理等。

通常一個複雜的應用程序可能包含許多頂點着色器,但是在同一時刻只能有一個頂點着色器起作用

細分着色(可選)

細分着色器會使用patch來描述物體的形狀,其結果是幾何圖元的數量增加,並且模型的外觀會變得更加平順。其實就是對頂點着色器傳遞的數據進行二次處理,平滑模型。

幾何着色(可選)

允許在光柵化之前對每個幾何圖元做進一步處理,例如創建新的圖元,丟棄不需要的圖元,甚至丟棄所有圖元。

圖元裝配

前面的階段都是處理頂點數據,而圖元裝配階段則是將這些頂點與相關的幾何圖元之間組織起來,準備下一步的剪切和光柵化工作。

剪切

頂點可能落在視口(我們可以進行繪製的窗口區域)之外,此時與頂點相關的圖元會作出改動,以保證相關的像素不會在視口外繪製

光柵化

剪切之後將更新之後的圖元傳遞到光柵化單元,生成對應的片元。光柵化的工作是判斷某一部分幾何體(點、線、三角形)所覆蓋的屏幕空間,其實就是將輸入的數學描述轉換爲屏幕位置對應的像素片元,供片元着色器使用,此時的片元是候選的,在片元着色器階段可能使用,也可能丟棄。

片元着色

最後一個可通過編程控制屏幕上顯示顏色的階段,在這個階段我們使用着色器來計算片元的最終顏色和它的深度值,在這裏我們還可以對不需要的片元進行丟棄

逐片元操作

在這個階段我們會使用深度測試和模板測試等方式來決定一個片元是否可見。如果一個片元成功地通過了所有激活的測試,那麼它就可以被直接繪製到幀緩存中,它對應的像素的顏色值(也可能包含深度值)會被更新,如果開啓了融混模式,那麼片元的顏色會與該像素當前的顏色相疊加,形成一個新的顏色值並寫入幀緩存中。

以上就是OpenGL管線渲染流程的全部內容,可能還有許多不足之處,望大家指出,互相學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章