OpenGL ES 2.0 渲染管線 學習筆記


圖中展示整個OpenGL ES 2.0可編程管線

圖中Vertex Shader和Fragment Shader 是可編程管線;

 

Vertex Array/Buffer objects

頂點數據來源,這時渲染管線的頂點輸入,通常使用 Buffer objects效率更好。

Vertex Shader

頂點着色器通過矩陣變換位置、計算照明公式來生成逐頂點顏色已經生成或變換紋理坐標等基於頂點的操作。

Primitive Assembly

圖元裝配經過着色器處理之后的頂點在圖片裝配階段被裝配為基本圖元。OpenGL ES 支持三種基本圖元:點,線和三角形,它們是可被 OpenGL ES 渲染的。接着對裝配好的圖元進行裁剪(clip):保留完全在視錐體中的圖元,丟棄完全不在視錐體中的圖元,對一半在一半不在的圖元進行裁剪;接着再對在視錐體中的圖元進行剔除處理cull):這個過程可編碼來決定是剔除正面,背面還是全部剔除。

Rasterization

光柵化。在光柵化階段,基本圖元被轉換為二維的片元(fragment),fragment 表示可以被渲染到屏幕上的像素,它包含位置,顏色,紋理坐標等信息,這些值是由圖元的頂點信息進行插值計算得到的。這些片元接着被送到片元着色器中處理。這是從頂點數據到可渲染在顯示設備上的像素的質變過程。

 

Fragment Shader

片元着色器通過可編程的方式實現對每個片元的操作。在這一階段它接受光柵化處理之后的fragment,color,深度值,模版值作為輸入,片元着色器可以拋棄片元,也可以生成一個或多個顏色值作為輸出。

逐片段操作

 

像素歸屬測試:這一步驟由OpenGL ES內部進行,不由開發人員控制;測試確定幀緩沖區的位置的像素是否歸屬當前OpenGL ES所有,如不屬於或被另一個窗口遮擋,從而完全不顯示這些像素。

裁剪測試:判斷像素是否在由 glScissor 定義的剪裁矩形內,不在該剪裁區域內的像素就會被剪裁掉;

模板和深度測試:測試輸入片段的模板和深度值上進行,以確定片段是否應該被拒絕;深度測試比較下一個片段與幀緩沖區中的片段的深度,從而決定哪一個像素在前面,哪一個像素被遮擋;

混合:是將片段的顏色和幀緩沖區中已有的顏色值進行混合,並將混合所得的新值寫入幀緩沖;

抖動:可用於最小化因為使用有限精度在幀緩沖區中保存顏色值而產生的偽像。

Framebuffer:這是流水線的最后一個階段,Framebuffer 中存儲這可以用於渲染到屏幕或紋理中的像素值,也可以從Framebuffer 中讀回像素值,但不能讀取其他值(如深度值,模版值等)。

 

參考鏈接

OpenGL ES 2.0 Programming Guide


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM