上文鏈接:OpenGL ES之路01-GLSL語(yǔ)言(上) - 簡(jiǎn)書
5.向量和矩陣內(nèi)的元素訪問(wèn)
1)什么是分量
分量就是聚合類型中的一個(gè)元素岩调。
2)分量名稱三種形式的集合(向量)
齊次坐標(biāo)的含義:將一個(gè)原本是n維的向量分苇,用n+1維來(lái)表示摇幻。
例如:(8,4,2)和(4,2,1)中 如果說(shuō)第三個(gè)分量是齊次坐標(biāo)驱还,則這兩個(gè)點(diǎn)位置是一樣的称簿,都用來(lái)表示二維點(diǎn)(4,2)
3)向量與矩陣中的元素訪問(wèn)方式?
mat3 m = mat3(1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0);?
vec3 xyz=m[2];? //獲取矩陣的第二列
float s=m[1][1]; //獲取指定數(shù)
float s=m[1].y;
6.結(jié)構(gòu)體
1)定義
從邏輯上將不同的類型的數(shù)據(jù)類型組合到一個(gè)數(shù)據(jù)集合中
2)作用
方便使用耸棒,簡(jiǎn)化運(yùn)算丰歌。
3)定義一個(gè)結(jié)構(gòu)體
struct info{
vec3 color;
vec4 xyzw;
cev2 st;
}
4)采樣器
7.數(shù)組
1)定義:有限個(gè)類型相同的變量集合
2)特性及注意事項(xiàng)
①.GLSL支持任意類型數(shù)組姨蟋,包括結(jié)構(gòu)體
②.數(shù)組的索引是從零開始的,負(fù)數(shù)索引和超范圍索引都是不行的
③.數(shù)組可以定義大小立帖,或者沒有大小
float c[3];? ? ? float [3]c;? ? ? ?int index[]; //未定義數(shù)組,稍候可以重新聲明
④.數(shù)組屬于GLSL中的第一等類型:數(shù)組在GLSL里面是有構(gòu)造函數(shù)的眼溶,并且還可以用作函數(shù)的參數(shù)和返回類型,可以靜態(tài)初始化一個(gè)數(shù)組的值晓勇。
float c[3]=float[3](1.1,1.2,1.3);
⑤.多維數(shù)組
float c[3][5];
c[2][1]=2.0;
c.length();//獲取長(zhǎng)度
c[2].length();
8.類型修飾符
1)attribute
一般用于每個(gè)頂點(diǎn)都各不相同的數(shù)據(jù)堂飞,例如:顏色、頂點(diǎn)
①.只有頂點(diǎn)著色器中才會(huì)使用绑咱。
②.是屬性限定符
③.只能用來(lái)修飾浮點(diǎn)數(shù)的標(biāo)量绰筛、向量、矩陣變量描融,不能用于修飾其他類型
2)unifrom
一致變量限定符铝噩。一致變量:對(duì)同一組頂點(diǎn)組成的單個(gè)3D物體中所有的頂點(diǎn)都相同的量
①.主要出現(xiàn)在頂點(diǎn)和片元著色器中
②.可以修飾所有的基本數(shù)據(jù)類型
3)verying
用來(lái)傳遞頂點(diǎn)著色器中的數(shù)據(jù)到片元著色器中
4)const
加入后變量值不可變,常亮窿克,編譯時(shí)變量
編譯時(shí)變量:在聲明的時(shí)候要進(jìn)行初始化骏庸,編譯器在編譯的時(shí)候不需要給他分配任何運(yùn)行時(shí)的資源。
例如:const float PI=3.14;
5)in和out
用in修飾的變量代表輸入變量年叮,用out修飾的代表輸出變量
6)inout
用來(lái)修飾參數(shù)為輸入輸出參數(shù)具被,同時(shí)具有兩種功能
9.語(yǔ)句
1)操作符重載
例如向量和矩陣間乘法:vec3 v;? mat3 m;? vec3 r=v*m;(矩陣和向量維度必須匹配)
2)控制流
if(){}else{}? switch
3)循環(huán)語(yǔ)句
for(){}? ?while(){}? do{}while()
4)流控制語(yǔ)句
break;? ?return;? continue;
discard;(丟棄當(dāng)前片元,終止片元著色器執(zhí)行只损,只能用于偏于著色器中)