3D開發學習-着色語言 Shading Language基礎(一)

一:簡介:

OpenGL ES 着色語言是一種高級的圖形編程語言.其源自應用廣泛的C語言,同時具有RenderMan以及其他編程語言的一些優良特性.

與傳統的語言不同的是,他提供了更加豐富的原生類型,比如向量,矩陣等.OpenGL ES着色語言的特性如下:

1.Open GL着色語言是一種高級的過程語言(不是面向對象)

2.對於頂點着色器,片元着色器使用的是同樣的語言,不區分.

3.基於C/C++的語法及流程控制

4.完美支持向量與矩陣的各種操作

5.通過類型限定符管理輸入和輸出

6.擁有大量的內置函數,提供的功能豐富.

有人總結說過,OpenGL ES着色語言是一種易於實現,功能強大,便於使用,完美支持硬件靈活性,並且可以高度並行處理,性能優良的高級圖形編程語言.因此,3D開發的話,掌握着色語言就變得尤爲重要了.


二:着色語言基礎:

雖然OpenGL ES的着色語言是基於C/C++的,但是還是有很多不一樣的地方的.比如說,該語言不支持雙精度(double),字節型(byte),短整型(short),長整形(long),並且取消了C的聯合體(union),

枚舉型(enum),無符號整形(unsigned)以及位運算等特點.

1.標量:標量在着色語言中被稱爲是 無向量 .只有大小,沒有方向.運算尊選代數運算.主要類型有三個

布爾型:bool bool b;//申明一個布爾值

整形:int int i;//申明一個整形

浮點型:float float f;//申明一個浮點型

2.向量:可以理解爲是用同樣類型的標量組成,基本類型爲bool,int,float三種.每個向量是有兩個,三個,四個相同的標量組成的.

vec2 : 包含兩個浮點數的向量;

vec3 : 包含三個浮點數的向量;

vec4 : 包含四個浮點數的向量;

ivec2 :包含兩個整形數的向量;

bvec4 : 包含四個布爾型的向量;

特殊的一個點:當把向量看作顏色的時候,可以使用r g b a 四個分量,代表紅 綠 藍 透明度,如:

aColor.r = 0.6 ; //給向量aColor指定紅色分量

aColor.a = 0.6 ; //給向量aColor指定透明度分量

當把向量看作座標位置時可以使用x y z w四個分量,用法如顏色.

當把向量看作紋理座標時,可以使用s t p q四個分量,用法如顏色.

此處,除了使用 . 作爲加分量名外,還可以使用數組的方式實現,如:

aColor[0] = 0.6; // 給向量aColor指定紅色分量

需要注意的是,一次只能使用一組分量,比如使用r g b a 的時候,不能混合 x y z w.

3.矩陣:矩陣,平凡用於3D中的旋轉,縮放,平移等,因此,矩陣支持就顯得很必要了.

mat2 : 2 X 2 的浮點數矩陣;

mat3 : 3 X 3 的浮點數矩陣;

mat4 : 4 X 4 的浮點數矩陣;

在着色語言中,矩陣是按照順序組織的,也就是說可以看作是幾個列向量組成.比如,mat3就是由3個vec3組成的.

在取值的時候,比如matrix是一個mat3的矩陣,那麼matrix[1]就渠道的是這個矩陣的第二列,爲一個vec3向量.matrix[1][1]取到的是第二行第二列的數,是一個float型.

4.採樣器:不同與C語言的基本數據類型,採樣器專門用來進行紋理採樣.一個採樣器代表一副或一套紋理貼圖.

sampler2D : 用於訪問2維紋理;

sampler3D : 用於訪問3維紋理;

samplerCube : 用於訪問立方貼圖紋理;

5.結構體:自定義結構體,如C語言,關鍵詞使用struct,例如:

struct info {

vec3 color;

vec3 position;

vec2 textureCoor;

}

6.數組:

vec3 position[20] ; //申明一個包含20個vec3的數組


vec3 position[] ; //申明一個大小不固定的數組

postion[3] = vec3(3.0) ; //position的大小需要是4

7.空類型:空類型使用void,例如:

void main() {                              }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章