1. 程式人生 > >OpenGL ES 3.0程式設計指南學習筆記 第6章 頂點屬性、頂點陣列和緩衝區物件

OpenGL ES 3.0程式設計指南學習筆記 第6章 頂點屬性、頂點陣列和緩衝區物件

1)vec2等為float型,也就是著色語言預設為float操作。float,vec2,vec3,vec4
2)矩陣以列優先順序儲存,也就是說矩陣可以看做是由幾個列向量組成,例如;
mat3 myMat3 = mat3(1.0, 0.0, 0.0,//First column
0.0, 1.0, 0.0,//Second column
0.0, 1.0, 1.0//Third column
);

vec4 col0 = myMat4[0];
float m1_1 = myMat4[1][1];

3)支援const,結構體
4)支援陣列,例如:
float a[4] = float[](1.0, 2.0, 3.0, 4.0);
float b[4] = float[4](1.0, 2.0, 3.0, 4.0);
vec2 c[2] = vec2[2](vec2(1.0), vec2(1.0));

5)向量加法,向量與矩陣乘法,矩陣與矩陣乘法滿足線性代數特性;
向量與向量乘法不滿足線性代數特性,只是各個分量單獨相乘,類似卷積。

6)函式支援in/out/inout限定符,in表示引數按值傳送,函式不能修改;
out表示該變數的值不能傳入函式,但是在函式返回時修改;
inout表示變數按照引用傳入函式,如果該值修改,它將在函式退出後變化。
預設為in,例如
vec4 myFunc(inuot float myFloat,
out vec4 myVec4,
mat4 myMat4);//in parameter(default)

另外,函式不支援遞迴。

7)uniform變數在全域性作用域中可見,所以在頂點著色器和片段著色器中是共享的,因此頂點和片段中的宣告必須一致。


8)attribute一般用於每個頂點不相同的兩,例如頂點位置,顏色等。
而uniform用於對同一組頂點組成的單個3D物體中所有頂點都相同的量,例如當前光源位置。

9)精度限定符可指定著色器變數計算精度,可以宣告為低、中、高精度(lowp,mediump,highp)。
在較低精度上,著色器執行可能更快或者電源效率更高。
例如highp vec4 position;
precision highp float;
precision mediump int;

10)invariant關鍵字來規定用於計算輸出的相同計算的值必須相同,例如
invariant gl_Position;
invariant texCoord;
#pragma STDGL invariant(all)
編譯器為保證不變形,可能限制它做的優化,所以可能導致效能下降。因此需只在必要時使用或者限制使用的範圍。