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

第一:在上一篇博客中,寫了shading language的基礎類型,現在說一下shading language的基礎類型的聲明,初始化和作用域問題.

1.聲明,作用域及初始化:

變量的聲明及作用域與C++語法類似,可以在任何需要的地方聲明,同時作用域也與C++類似,分爲局部變量和全局變量.如下:

int a , b;   //全局變量a和b
vec3 aPosition = vec3(1.0 , 2.0 ,3.0); //全局變量並賦值
void myFunchtion(){
  int c = 14;//局部變量c
  a = 4;//全局變量賦值
  b = a*c;
}
向量和矩陣的初始化還有一些技巧,如下:

float a = 12.3;
float b = 11.4;
vec2 va = vec2(2.1 , 2.2); //聲明二維向量並賦值
vec2 vb = vec2(a , b); 
vec3 vc = vce3(vb , 11.1);//聲明三維向量並賦值
vec4 vd = vec4(va ,vb);
mat3 ma = mat3(vc , vc ,vc);//3X3矩陣
mat3 mb = mat3(2.1); //等同於{2.1 , 0 , 0 , 0 , 2.1 , 0 , 0 , 0 , 2.1}

2.變量初始化的規則:

a.常用初始化方式:變量可以在聲明的時候就初始化;

int a = 2 , b = 3 , c ;
b.限定符修飾的變量必須在聲明的時候初始化:

const float k = 1.1; //常量初始化
c.屬性變量,一致變量,易變變量在聲明的時候一定不能初始化:

attribute float angleSpan;     //屬性變量不可初始化
uniform int l ;  //一致變量不可初始化
varying vec3 position; //易變變量 不可初始化


第二,運算符.與大多數編程語言一樣,常用的運算符都是一樣的.

1.索引:

float array[10]; //聲明一個大小爲10的數組
array[2];//拿到索引爲2的數據

vec3 position = vec3(1.0 , 2.0 , 3.0);
float one = positon[1]; //拿到索引爲1的數據

2.混合選擇:可以通過 " .  "混合選擇;

vect4 color = vec4(0.3 , 0.4 , 0.5 , 0.6);
vec3 temp = color.agb; //實際數據(0.4 , 0.5 , 0.6)
vec4 temp1 = color.aaab;//實際數據(0.6 , 0.6 , 0.6 ,0.5)

3.算數運算符.包括(++    --    -(一元非)     !    *   /    +    -)

4.其他運算符:包括(<      >     <=      >=    ==   !=    &&   ^^   ||   ?:     =    +=    -=    *=    /=)

因爲3和4都和常規的編程語言一樣就不做多餘解釋了;

第三:類型轉換:

着色語言沒有提供類型自動提升,賦值表達式的兩個操作數類型必須完全相同.另外調用的函數的參數也要完全相同.而且着色語言沒有提供類型的強制轉換,只能通過構造函數實現;

float a = 1.0;
bool b = bool(a);

第四,限定符:着色器語言的限定符主要有如下幾個:

uniform mat4 uMVPMatrix;//一致變量修飾符uniform
attribute vec3 aPositon;//屬性變量修飾符attribute
varying vec4 aaColor;//易變變量修飾符varying
const int con = 5 ;//常量修飾符 const

第五,流程控制.

和常規的編程語言一樣,着色語言有if-else條件語句,while(do-while)循環語句和for循環語句.語法也基本一致.


第六:函數的聲明與使用:

基本格式如:   <返回類型>  函數名  (<參數序列>) {/*函數體*/}

需要注意的是在着色語言中有三種特定的修飾符

a. in 代表的是輸入性參數

b. out 代表的是輸出型參數
c . inout 代表的是輸入輸出型參數

第七:片元着色器中的浮點變量精度指定,從低到高分別是lowp   medium   highp

lowp float color;//精度級別lowp
varying medium vec2 Coord;//精度級別medium
highp mat4 m;//精度級別medium
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章