OpenGL ES 圖形管線解析

OpenGL ES 3.0實現(xiàn)了具有可編程著色功能的圖形管線,如下圖所示頂點著色器和片元著色器是OpenGL ES 3.0中管線的可編程階段。

OpenGL ES 圖形管線

頂點著色器

  • 頂點著色器輸入:
    1. 著色器程序 --- 描述頂點上執(zhí)行操作的頂點著?器程序源代碼/可執(zhí)行文件
    2. 頂點著色器輸入(屬性) --- 用頂點數(shù)組提供每個頂點的數(shù)據(jù)
    3. 統(tǒng)一變量(uniform) --- 頂點/?元著色器使用的不變數(shù)據(jù)
    4. 采樣器 --- 代表頂點著?器使用紋理的特殊統(tǒng)一變量類型
頂點著色器
  • 頂點著?器業(yè)務(wù):

    1. 矩陣變換位置
    2. 計算光照公式生成逐頂點顏色
    3. ?成/變換紋理坐標(biāo)

    總結(jié): 它可以用于執(zhí)行?定義計算,實施新的變換,照明或者傳統(tǒng)的固定功能所不允許的基于頂點的效果

  • 頂點著色器GLSL代碼案例:

attribute vec4 position;
attribute vec2 textCoordinate; 
uniform mat4 rotateMatrix; 
varying lowp vec2 varyTextCoord; 
void main()
{
    varyTextCoord = textCoordinate; 
    vec4 vPos = position;
    vPos = vPos * rotateMatrix;
    gl_Position = vPos;
}

圖元裝配

頂點著?器之后,下一個階段就是圖元裝配。

  • 圖元(Primitive): 點,線,三?形等幾何對象。

圖元裝配: 將頂點數(shù)據(jù)計算成一個個圖元.在這個階段會執(zhí)行裁剪、透視分割和Viewport變換操作。

圖元類型和頂點所確定將被渲染的單獨圖元。對于每個單獨圖元及其對應(yīng)的頂點,圖元裝配階段執(zhí)行的操作包括:將頂點著?器的輸出值執(zhí)行裁剪、透視分割、視?變換后進(jìn)?光柵化階段。

光柵化

在這個階段繪制對應(yīng)的圖元(點/線/三角形). 光柵化就是將圖元轉(zhuǎn)化成一組二維片段的過程.?這些轉(zhuǎn)化的片段將由片元著?器處理.這些二維片段就是屏幕上可繪制的像素.

?段著?器/?元著?器

  • ?元著色器/?段著?器輸入:
    1. 著?器程序—--描述片段上執(zhí)行操作的片元著?器程序源代碼/可執(zhí)行文件
    2. 輸?變量--—光柵化單元用插值為每個片段生成的頂點著?器輸出
    3. 統(tǒng)?變量(uniform)—--頂點/片元著?色器使用的不變數(shù)據(jù)
    4. 采樣器—--代表頂點著?器使用紋理的特殊統(tǒng)一變量類型
?元著?器
  • ?元著?器業(yè)務(wù):
    1. 計算顏色
    2. 獲取紋理值
    3. 往像素點中填充顏色值(紋理值/顏色值)

總結(jié): 它可以用于圖片/視頻/圖形中每個像素的顏色填充(比如給視頻添加濾鏡,實際上就是將視頻中每個圖片的像素點顏色填充進(jìn)行修改.)

  • 片元著色器GLSL代碼案例:
varying lowp vec2 varyTextCoord; 
uniform sampler2D colorMap; 
void main()
{
    gl_FragColor = texture2D(colorMap, varyTextCoord);
}

逐片段操作

逐片段操作
  • 像素歸屬測試: 確定幀緩存區(qū)中位置(Xw,Yw)的像素?前是不是歸屬于OpenGL ES所有. 例如,如果一個顯示OpenGL ES幀緩存區(qū)View被另外?個View所遮蔽.則窗口系統(tǒng)可以確定被遮蔽的像素不屬于OpenGL ES上下文.從而不全顯示這些像素.而像素歸屬測試是OpenGL ES的?部分,它不由開發(fā)者開人為控制,而是由OpenGL ES內(nèi)部進(jìn)行.
  • 裁剪測試: 裁剪測試確定(Xw,Yw)是否位于作為OpenGL ES狀態(tài)的一部分裁剪矩形范圍內(nèi).如果該?段位于裁剪區(qū)域之外,則被拋棄.
  • 深度測試: 輸?片段的深度值進(jìn)行?較,確定片段是否拒絕測試
  • 混合: 將新生成的?段顏色與保存在幀緩存的位置的顏?值組合起來.
  • 抖動: 抖動可?于最小化因為使用有限精度在幀緩存區(qū)中保存顏色值?產(chǎn)生的偽像。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容