編輯文章 - 部落格頻道 - CSDN.NET

來源:互聯網
上載者:User

標籤:style   color   使用   strong   io   檔案   資料   for   



Vertex Shader和Fragment Shader是可程式化管線。

 

Vertex Array/Buffer objects:頂點資料來源,這時渲染管線的頂點輸入,通常使用Buffer objects效率更好。在今天的樣本中,簡單起見,使用的是 Vertex Array;

 

Vertex Shader:頂點著色器通過可程式化的方式實現對頂點的操作,如進行座標空間轉換,計算 per-vertexcolor以及紋理座標;

 

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

 

Rasterization:光柵化。在光柵化階段,基本圖元被轉換為二維的片元(fragment),fragment 表示可以被渲染到螢幕上的像素,它包含位置,顏色,紋理座標等資訊,這些值是由圖元的頂點資訊進行插值計算得到的。這些片元接著被送到片元著色器中處理。這是從頂點資料到可渲染在顯示裝置上的像素的質變過程。

 

Fragment Shader:片元著色器通過可程式化的方式實現對片元的操作。在這一階段它接受光柵化處理之後的fragment,color,深度值,模版值作為輸入。

 

?  Per-Fragment Operation:在這一階段對片元著色器輸出的每一個片元進行一系列測試與處理,從而決定最終用於渲染的像素。


頂點變換和光照(T&L)

在一個物體被繪製到螢幕之前,必須先計算它的光照,並且將它從3D世界轉換到螢幕二維座標系中(這兩個過程稱為光照和頂點變換,也就是T&L, Transformation & Lighting)。

 

? 世界變換

 

世界變換就是將物體頂點座標從模型空間轉換到世界空間。

 

平移變換


旋轉變換

 

繞x軸旋轉θ角


繞y軸旋轉θ角


繞z軸旋轉θ角


縮放變換


?  觀察變換

 

以攝像機位置為參考原點,攝像機觀察的方向為座標軸,建立的座標系稱為觀察座標系

 

?  投影變換

 

將三維物體投影到二維表面上,即投影到虛擬攝像機的膠片上,這個過程就是投影變換。以膠片中心為參考原點的空間座標系稱為投影座標系,物體在投影座標系中的座標稱為投影座標

 

? 視區變換

 

物體在投影座標系中的表示為浮點座標,通過定義螢幕顯示地區(一般為顯示視窗大小),將浮點座標轉化為像素座標的過程稱為視區變換,該像素座標值稱為螢幕座標。例如,如果定義社區大小為寬640像素,高480像素,那麼投影座標(1.0f,05.f)經過社區變換螢幕座標為(640,240),如果定義視區大小為寬1024像素,高800像素,經過社區變換螢幕座標為(1024,400)。


頂點著色器(VertexShader)


Attributes:使用頂點數組封裝每個頂點的資料,一般用於每個頂點都各不相同的變數,如頂點位置、顏色等。

 

Uniforms:頂點著色器使用的常量資料,不能被著色器修改,一般用於對同一組頂點組成的單個3D物體中所有頂點都相同的變數,如當前光源的位置。

 

Samplers:這個是可選的,一種特殊的uniforms,表示頂點著色器使用的紋理。

 

Shader program:頂點著色器的源碼或可執行檔,描述了將對頂點執行的操作。

 

Varying:varying變數用於儲存頂點著色器的輸出資料,當然也儲存片元著色器的輸入資料,varying 變數最終會在光柵化處理階段被線性插值。頂點著色器如果聲明了varying 變數,它必須被傳遞到片元著色器中才能進一步傳遞到下一階段,因此頂點著色器中聲明的varying 變數都應在片元著色器中重新聲明同名同類型的 varying 變數。OpenGL ES 2.0 也規定了所有實現應該支援的最大 varying 變數個數不能少於 8 個。


圖元裝配


頂點著色器之後,渲染流水線的下一個階段是圖元裝配,圖元是一個能用opengl es繪圖命令繪製的幾何體,繪圖命令指定了一組頂點屬性,描述了圖元的幾何形狀和圖元類型。頂點著色器使用這些頂點屬性計算頂點的位置、顏色以及紋理座標,這樣才能傳到片元著色器。在圖元裝配階段,這些著色器處理過的頂點被組裝到一個個獨立的幾何圖元中,例如三角形、線、點精靈。對於每個圖元,必須確定它是否位於視椎體內(3維空間顯示在螢幕上的可見地區),如果圖元部分在視椎體中,需要進行裁剪,如果圖元全部在視椎體外,則直接丟棄圖元。裁剪之後,頂點位置轉換成了螢幕座標。背面剔除操作也會執行,它根據圖元是正面還是背面,如果是背面則丟棄該圖元。經過裁剪和背面剔除操作後,就進入渲染流水線的下一個階段:光柵化。



 光柵化和像素處理


光柵化階段把圖元轉換成片元集合,之後會提交給片元著色器處理,這些片元集合表示可以被繪製到螢幕的像素。如所示:



片元著色器(FragmentShader)


片元著色器對片元實現了一種通用的可程式化方法,它對光柵化階段產生的每個片元進行操作

Varying variables:頂點著色器輸出的varying變數經過光柵化插值計算後產生的作用於每個片元的值。

 

Uniforms:片元著色器使用的常量資料

 

Samplers:一種特殊的uniforms,表示片元著色器使用的紋理。

 

Shader program:片元著色器的源碼或可執行檔,描述了將對片元I執行的操作。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.