OpenGL ES 渲染管線

2021-10-06 22:48:50 字數 1677 閱讀 2782

頂點著色器是乙個可程式設計的處理單元

執行頂點的變換(

透視矩陣

)、光照、材質的應用等與計算等頂點的相關操作

每個頂點執行一次頂點著色器

opengl es的工作流程為首先將原始的頂點幾何資訊及其他屬性傳送到頂點著色器中

經過頂點著色器處理後產生頂點座標、顏色、位置等後續流程需要的各項定點屬性資訊

然後傳遞給

圖元裝配

圖元裝配

不可程式設計

它主要分為圖元組裝和圖元處理兩個階段

圖元組裝將頂點著色器處理好的頂點以

點繪製、線段繪製或三角形繪製的方式進行組裝(常用三角形)

點繪製的圖元僅需要乙個單獨的頂點,每個頂點為乙個圖元;線段繪製的圖元則需要兩個頂點,每兩個頂點構成乙個圖元;三角形繪製方式下需要3個頂點構成乙個圖元

圖元處理首先需要消除位於半空間(half-space)之外的部分幾何圖元,這個半空間是由乙個剪裁平面所定義的。例如,點剪裁就是簡單地接受或者拒絕頂點,線段或多邊形剪裁可能需要增加額外的頂點,具體取決於直線或者多邊形與剪裁平面之間的位置關係,剪裁時,若圖元完全位於視景體以及自定義剪裁平面的內部,則將圖元傳遞到後面的步驟進行處理;如果其完全位於視景體或者自定義剪裁平面的外部,則丟棄該圖元;如果其有一部分位於內部,另一部分位於外部,則需要剪裁該圖元。最後如果開啟了背面剪裁還需要判斷改圖元是否是背面面對攝像機,如果是則需要將其剔除。

光柵化不可程式設計

光柵化是將圖元轉化為一組二維片段的過程(後續這些二維片段將交給片元著色器上色)

二維片元代表著可在螢幕上繪製的畫素

從分配給每個圖元頂點的頂點著色器輸出生成每個片元值的機制稱作插值

簡單來說就是將3d空間中的物體轉換成螢幕上的乙個個畫素點(其實應該稱之為「候選畫素點」,因為後面還有深度測試會剔除被擋住的部分)

這些點是沒有顏色的只有位置資訊和深度資訊,顏色需要後續的片元著色器賦予

片元著色器可程式設計

片元著色器是處理片元值及其相關資料的可程式設計單元

它執行紋理的取樣、顏色的彙總、計算顏色等操作

每個片元(或者紋理的每個畫素)執行一次

將3d物體中的圖元光柵化後產生的每個片元

(或者紋理的每個畫素)

的顏色等屬性計算出來送入後續階段(如剪裁測試、深度測試或模板測試)

啟用剪裁測試後,opengl es會檢查每個片元在幀緩衝中對應的位置,若對應位置在剪裁視窗中則將此片元送入下一階段,否則丟棄

也就是可以在螢幕上指定一片區域繪製,不在這片區域不進行繪製

深度測試是將輸入片元的深度值與幀緩衝區中儲存的對應位置片元的深度值進行比較

若輸入片元的深度值小則將輸入片元則送入下一階段準備覆蓋幀緩衝中的原片元或與幀緩衝中的原片元混合,否則丟棄輸入片元

模板測試的主要功能為將繪製區域限定在一定的範圍內,一般用在湖面倒影、映象等場合

若程式中開啟了alpha混合,則根據混合因子將上一階段送來的片元與幀緩衝中對應位置的片元進行alpha混合;否則送入的片元將覆蓋幀緩衝中對應位置的片元

opengl es 中的物體繪製並不是直接在螢幕上進行的,而是預先在幀緩衝區中進行繪製

每繪製完一幀再將繪製的結果交換到螢幕上

每次繪製新的一幀時都需要清除緩衝區中的相關資料,否則有可能產生不正確的繪製效果

參考:

OpenGL ES渲染管線

渲染管線 graphics pipeline 在 opengl es 1.0 版本中,支援固定管線,而 opengl es 2.0 版本不再支援固定管線,只支援可程式設計管線。什麼是管線?什麼又是固定管線和可程式設計管線?管線 pipeline 也稱渲染管線,因為 opengl es在渲染處理過程中...

整合 OpenGLES 渲染管線系列(1)

在opengl中,任何事物都在3d空間中,而螢幕和視窗卻是2d畫素陣列,這導致opengl的大部分工作都是關於把3d座標轉變為適應你螢幕的2d畫素。3d座標轉為2d座標的處理過程是由opengl的圖形渲染管線管理的。圖形渲染管線是一系列按序處理操作,可以被劃分為兩個主要部分 第一部分把你的3d座標轉...

OpenGL ES 3 0 渲染管線介紹

記住下面這張圖,其中帶陰影的方框表示 opengl es 3.0 管線中可程式設計階段。頂點著色器主要進行頂點相關的一些操作。可以用於通過矩陣變換位置 計算照明公式來生成逐頂點顏色以及生成或者變換紋理座標等基於頂點的傳統操作。產生紋理座標 顏色 點位置等資訊送往後續階段。頂點被組合成圖元的過程叫做圖...