what  is OpenGL ES 2.0  ?


201200082  


Vertex Shader 頂點著色器

頂點著色器實現通用可程式設計方法運作上的頂點。

頂點著色器輸入由下列各項組成:

• Attributes 屬性 — — 提供使用頂點陣列的每個頂點資料。

• Uniforms 制服 — — 使用的頂點著色器的常量資料。

• Samplers 取樣器 — — 特定類型的代表所使用的紋理的制服

頂點著色器。頂點著色器中的取樣器是可選的。

• Shade Program 著色器程式 — — 頂點著色器程式原始程式碼或可執行檔

用於描述將頂點執行的操作。

Vertex Arrays 頂點陣列 /

Buffer Objects 緩衝區物件

Vertex 頂點

Shader 著色器

Texture 紋理

Memory 記憶體

Fragment 片段

Primitive 基元

Assembly Rasterization 柵格化

Per-Fragment 每個片段

操作

Framebuffer 框架緩衝區

API

頂點著色器的輸出被稱為可變變數。在原始柵格化的階段,為每個生成計算不同的值

片段,作為輸入傳遞給片段渲染器。機制用來生成一個不同的值,為每個片段中的變

分配給每個頂點的原始值稱為插值。" 投入和產出的頂點著色器可圖示


201200083  

 

Vertex shaders 頂點著色器可以如用於傳統的基於頂點的操作變換的矩陣,計算到照明的位置

 

生成一種每個頂點顏色,並生成或變換紋理座標。另外,因為頂點著色器指定的應用程式,

 

頂點著色器可以用於執行自訂頂點轉換。下面程式碼 顯示了使用 OpenGL ES 網底編寫頂點著色器語言。我們將解釋在本書後面的大量詳細的頂點著色器。我們展示此著色器現在只是為了給你什麼頂點著色器的概念看起來像。示例 1-1 中的頂點著色器需要的地位和其關聯

 

顏色的資料作為輸入屬性),轉換的 4 × 4 矩陣的位置輸出轉換的位置和顏色。

 

1. // uniforms used by the vertex shader

 

2. uniform mat4 u_mvpMatrix; // matrix to convert P from model

 

3. // space to normalized device space.

 

4.

 

5. // attributes input to the vertex shader

 

6. attribute vec4 a_position; // position value

 

7. attribute vec4 a_color; // input vertex color

 

8.

 

9. // varying variables – input to the fragment shader

 

10. varying vec4 v_color; // output vertex color

 

11.

 

12. void

 

13. main()

 

14. {

 

15. v_color = a_color;

 

16. gl_Position = u_mvpMatrix * a_position;

 

17. }

 

第 2 行描述存儲合併的統一變數 u_mvpMatrix模型視圖和投影矩陣。6 和 7 行描述的投入

 

頂點著色器,稱為頂點的屬性。a_position 是輸入的頂點的位置屬性和 a_color 是輸入的頂點顏色屬性。第 10 行我們聲明不同的 v_color 來存儲的輸出描述了每個頂點顏色,頂點著色器。內置變自動,聲明的叫做的 gl_Position 和著色器必須編寫到此變數轉換後的位置。一個頂點或片段渲染器已單一的進入點調用的主要功能。行 12–17 描述頂點著色器主要功能。在行中 15,我們讀頂點屬性輸入的 a_color並將其寫入為頂點輸出顏色 v_color。在轉換 16 行

 頂點位置時的輸出,它寫入到 gl_Position

 Primitive Assembly

 頂點著色器之後,管道的下一階段Primitive Assembly是一個物件,可以使用適當繪製的幾何物件OpenGL ES 中的繪圖命令。這些繪圖命令指定的一組頂點屬性的描述原始的幾何與原始類型。每個頂點被描述一組的頂點屬性。這些頂點

 

屬性中包含的頂點著色器使用計算的資訊位置和其他資訊的可傳遞到片段渲染器

 

例如其顏色和紋理座標。

 在Primitive Assembly階段,著色的頂點被組裝成個人幾何primitives,可以繪製一個三角形,如線,或 point-sprite。對於每個 primitives ,必須確定是否原始在視圖錐台 (可見的 3D 空間的區域內的謊言螢幕)。如果原始不完全在視圖圓錐體內,原始可能需要將被剪裁到視圖圓錐體。如果原始完全外部,則會丟棄。修剪後的頂點位置被轉換向螢幕座標。撲殺的操作,也可以執行,丟棄基元基於他們是否面臨著前進或後退。後剪切和挑選,原始就緒將被傳遞到下一階段管道,這是柵格化 Rasterization 階段。

 Rasterization

 繪製合適 primitives ( point-sprite 、 線條或三角形)。 Rasterization 柵格化是指將原語轉換成一組的二維碎片過程其中由片段渲染器進行處理。這些二維片段代表可以在螢幕繪製的圖元。



201200084    


 

Fragment Shader

 

片段渲染器實現通用可程式設計方法用於操作上的碎片。

 

片段渲染器,如下圖 ,執行時為每個生成柵格化階段,需要以下輸入片段:

 

• Varying variables變數 — — 的頂點著色器是由生成的輸出

 

每個片段使用插值的柵格單元。

 

• Uniforms — — 片段渲染器所使用的常量資料。

 

• Samplers 取樣器 — — 特定類型的代表所使用的紋理的制服

 

片段渲染器。

 

• Shader program 著色器程式 — — 片段渲染器程式原始程式碼或可執行檔用於描述將片段執行的操作。片段渲染器可以放棄該片段或生成一種顏色值稱為 gl_FragColor。顏色、 深度、 模具中和螢幕生成成為柵格化階段的座標位置 yw xw)

 

OpenGL ES 2.0 管道的每個片段操作階段的投入。



201200085  

 

A Fragment Shader Example

1. precision mediump float;

2.

3. varying vec4 v_color; // input vertex color from vertex shader

4.

5.

6. void

7. main(void)

8. {

9. gl_FragColor = v_color;

10.}

 

第 3 行描述該片段的輸入著色器。頂點著色器必須編寫相同的可變變數集這是由片段渲染器讀取。線路 6 到步驟 10 描述該片段著色器主要功能。請注意沒有輸出宣佈在片段中

 

著色器。這是因為只有輸出變數是 gl_FragColor,這在本示例設置為輸入顏色到片段渲染器獲 v_color 在第 9 行。

 

Per-Fragment Operations

 

一個片段產生的柵格化 (xw,yw) 與螢幕座標可以只修改框架緩衝區中的位置 yw xw) 圖元。下圖 說明OpenGL ES 2.0 每個片段操作階段。

 

 201200086  



 

每個片段操作階段執行以下功能 (和測試) 對每個片段,如上圖 所示:

 

• 圖元所有權測試 — — 該測試確定如果在位置 (xw,圖元yw) 在框架緩衝區中當前由擁有 OpenGL ES。此測試允許控制框架緩衝區中的哪些圖元的視窗系統屬於當前 OpenGL ES 上下文。例如,如果一個視窗顯示視窗的 OpenGL ES 框架緩衝區被另一個遮蔽視窗,視窗系統可能確定的模糊的圖元不會將其擁有的 OpenGL ES 上下文和因此不可能顯示在所有。

 

• Scissor test 剪式測試 — — 剪式測試確定是否 (xw,yw) 範圍內剪式矩形定義為 OpenGL ES 狀態的一部分。如果該片段剪式區外,該片段將被丟棄。

 

• Stencil and depth tests 模具和深度測試 — — 這些模具和深度對執行測試要確定該片段應的傳入片段的價值或者不拒絕。

 

• Blending 混合 — — 混合結合了新生成的片段顏色在位置框架緩衝區中存儲的顏色值的值(xw yw)。

 

• Dithering 抖動 — 抖動可以用於最小化可以的工件從使用有限的精度存儲框架緩衝區中的顏色值會出現。片段每階段的結束,在任一的片段被拒絕或片段顏色、 深度或模具中的值寫入幀位置(xw yw)。片段顏色、 深度和模具中的值寫入取決於相應的寫的面具是否啟用或不。

 

寫遮罩允許更好地控制顏色、 深度和模具中的值寫入到適當的緩衝區。例如,寫遮罩

 

可以設置顏色緩衝區,沒有紅色的值寫入到顏色緩衝區。此外,OpenGL ES 2.0 還提供了一個介面,讀回圖元從框架緩衝區。請注意只有圖元重新讀取顏色緩衝區。不能讀回的深度和模具中的值。

 

 


賈雷 發表在 痞客邦 PIXNET 留言(0) 人氣()