OpenGL ES:渲染管線

 
 
 

頂點着色器

   
頂點着色器是一個可編程的處理單元
執行頂點的變換(透視矩陣)、光照、材質的應用等與計算等頂點的相關操作
每個頂點執行一次頂點着色器
OpenGL ES的工作流程爲首先將原始的頂點幾何信息及其他屬性傳送到頂點着色器中
經過頂點着色器處理後產生頂點座標、顏色、位置等後續流程需要的各項定點屬性信息
然後傳遞給圖元裝配
 
 

圖元裝配

   
圖元裝配不可編程
它主要分爲圖元組裝圖元處理兩個階段
 
圖元組裝將頂點着色器處理好的頂點以點繪製、線段繪製或三角形繪製的方式進行組裝(常用三角形)
點繪製的圖元僅需要一個單獨的頂點,每個頂點爲一個圖元;線段繪製的圖元則需要兩個頂點,每兩個頂點構成一個圖元;三角形繪製方式下需要3個頂點構成一個圖元
 
圖元處理首先需要消除位於半空間(half-space)之外的部分幾何圖元,這個半空間是由一個剪裁平面所定義的。例如,點剪裁就是簡單地接受或者拒絕頂點,線段或多邊形剪裁可能需要增加額外的頂點,具體取決於直線或者多邊形與剪裁平面之間的位置關係,剪裁時,若圖元完全位於視景體以及自定義剪裁平面的內部,則將圖元傳遞到後面的步驟進行處理;如果其完全位於視景體或者自定義剪裁平面的外部,則丟棄該圖元;如果其有一部分位於內部,另一部分位於外部,則需要剪裁該圖元。最後如果開啓了背面剪裁還需要判斷改圖元是否是背面面對攝像機,如果是則需要將其剔除。
 
 

光柵化

      
 
光柵化不可編程
光柵化是將圖元轉化爲一組二維片段的過程(後續這些二維片段將交給片元着色器上色)
二維片元代表着可在屏幕上繪製的像素
從分配給每個圖元頂點的頂點着色器輸出生成每個片元值的機制稱作插值
簡單來說就是將3D空間中的物體轉換成屏幕上的一個個像素點(其實應該稱之爲“候選像素點”,因爲後面還有深度測試會剔除被擋住的部分)
這些點是沒有顏色的只有位置信息和深度信息,顏色需要後續的片元着色器賦予
 
 

片元着色器

    
片元着色器可編程
片元着色器是處理片元值及其相關數據的可編程單元
它執行紋理的採樣、顏色的彙總、計算顏色等操作
每個片元(或者紋理圖片的每個像素)執行一次
將3D物體中的圖元光柵化後產生的每個片元(或者紋理圖片的每個像素)的顏色等屬性計算出來送入後續階段(如剪裁測試、深度測試或模板測試)
 
 

剪裁測試

    
啓用剪裁測試後,OpenGL ES會檢查每個片元在幀緩衝中對應的位置,若對應位置在剪裁窗口中則將此片元送入下一階段,否則丟棄
也就是可以在屏幕上指定一片區域繪製,不在這片區域不進行繪製
 
 

深度測試與模板測試

    
深度測試是將輸入片元的深度值與幀緩衝區中存儲的對應位置片元的深度值進行比較
若輸入片元的深度值小則將輸入片元則送入下一階段準備覆蓋幀緩衝中的原片元或與幀緩衝中的原片元混合,否則丟棄輸入片元
 
模板測試的主要功能爲將繪製區域限定在一定的範圍內,一般用在湖面倒影、鏡像等場合
 
 

顏色緩衝混合

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

幀緩衝(FBO,Frame Buffer Object)

 
OpenGL ES 中的物體繪製並不是直接在屏幕上進行的,而是預先在幀緩衝區中進行繪製
每繪製完一幀再將繪製的結果交換到屏幕上
每次繪製新的一幀時都需要清除緩衝區中的相關數據,否則有可能產生不正確的繪製效果
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章