頂點着色器對頂點實現了一種通用的可編程方法。
頂點着色器的輸入數據由下面組成:
-
Attributes:使用頂點數組封裝每個頂點的數據,一般用於每個頂點都各不相同的變量,如頂點位置、顏色等。
-
Uniforms:頂點着色器使用的常量數據,不能被着色器修改,一般用於對同一組頂點組成的單個3D物體中所有頂點都相同的變量,如當前光源的位置。
-
Samplers:這個是可選的,一種特殊的uniforms,表示頂點着色器使用的紋理。
-
Shader program:頂點着色器的源碼或可執行文件,描述了將對頂點執行的操作。
頂點着色器的輸出數據是varying(易變)變量,在圖元光柵化階段,這些varying值為每個生成的片元進行計算,並將結果作為片元着色器的輸入數據。從分配給每個頂點的原始varying值來為每個片元生成一個varying值的機制叫做插值。
頂點着色器數據的輸入和輸出可以參考下圖:

頂點着色器可用於傳統的基於頂點的操作,例如:基於矩陣變換位置,進行光照計算來生成每個頂點的顏色,生成或者變換紋理坐標。
另外因為頂點着色器是由應用程序指定的,所以你可以用來進行任意自定義的頂點變換。
下面是一個用OpenGL ES着色器語言編寫的頂點着色器源碼,這個頂點着色器使用一個position和跟它相關聯的color數據作為輸入數據,通過一個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 main()
13. {
14. v_color = a_color;
15. gl_Position = u_mvpMatrix * a_position;
16. }
