變量與數據類型
- 整型(有符號,無符號)
int iValue = 3;
uint uiValue = 3u; - 浮點數(單精度)
float fValue = 3.1415f; - 布爾值
bool bValue = false; - 向量類型
vec2/vec3/vec4 2/3/4分量浮點向量
ivec2/ivec3/ivec4 2/3/4分量整型向量
uvec2/uvec3/uvec4 2/3/4分量無符號整型向量
bvec2/bvec3/bvec4 2/3/4分量無符號布爾向量
// 聲明4分量float向量
vec4 v1;
// 聲明4分量向量并賦值
vec4 v2 = vec4(1,2,3,4);
vec4 v3 = vec4(0,0,0,0);
// 向量運算
// 向量相加
v1 = v2 + v3;
vec4 v4 = v1;
v1 += vec4(10,10,10,10);
v1 *= 5;
// 通過x,y,z,w 賦值
v1.x = 3.0f;
v1.y = 4.0f;
v1.z = 5.0f;
v1.w = 1.0f;
v1.xy = vec2(1,2);
v1.xyz = vec3(1,2,3);
// 通過r,g,b,a 賦值
v2.r = 1.0f;
v2 = vec4(1.0f,1.0f,1.0f,1.0f);
// 通過s,t,p,q 紋理坐標分量
v1.st = vec2(1.0,2.0);
v1.st = v2.st;
// 不能混用臣缀,如下
v1.st = v2.xt;
// 向量類型swizzle調換
// 將RGB轉為BGR
v1.bgra = v2.rgba;
// 一次性操作幾個分量
v1.x = v2.x + 5.0f;
v1.xyz = v2.xyz + vec3(5.0f,4.0f,1.0f);
- 矩陣類型
mat2/mat2x2 兩行兩列矩陣
mat3/ mat 3x3 三行三列矩陣
mat4/ mat4x4 四行四列矩陣
mat2x3 二行三列
mat2x4 二行四列
mat3x2 三行二列
mat3x4 三行四列
mat4x2 四行二列
mat4x3 四行三列
mat4 m;
vec4 v;
vec4 out;
m = mat4(
1.0,1.0,1.0,1.0,
1.0,1.0,1.0,1.0,
1.0,1.0,1.0,1.0,
1.0,1.0,1.0,1.0
);
// m = mat4(1.0)
out = v * m ;
限定符
- <none> 普通本地變量,外部不可見不可訪問
- const 編譯常量获印,對函數來說是只讀參數
- varying 從前一階段傳過來的變量
- varying centroid 從前一階段傳過來的變量,質心插值
- attribute 傳遞到下一個處理階段或者在一個函數中指定返回值
- attribute centroid 傳遞到下一個處理階段,質心插值
- uniform 一個從客戶端代碼傳遞過來的變量街州,在頂點之間不做改變
實際使用
- xcode創(chuàng)建空白文件兼丰,命名為shaderv.vsh,頂點著色器
// 傳入的頂點位置向量
attribute vec4 position;
// 傳入的紋理向量,需要傳到片元著色器
attribute vec2 textCoordinate;
// 旋轉矩陣
uniform mat4 rotateMatrix;
// 傳到下一階段參數
varying lowp vec2 varyTextCoord;
void main() {
// 將紋理向量傳遞到片元著色器
varyTextCoord = textCoordinate;
//position 不可變參數
vec4 vPos = position;
// 頂點向量乘以旋轉矩陣,得到新的位置向量
vPos = vPos * rotateMatrix;
// 將變化后的位置傳給內建變量
gl_Position = vPos;
}
- 創(chuàng)建空白文件,命名為shaderf.fsh唆缴,片元著色器
// 頂點著色器傳遞過來的
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main() {
// 將頂點著色器傳過來的紋理向量,生成2D紋理,并傳給內建變量
gl_FragColor = texture2D(colorMap, varyTextCoord);
}
(本文為學習筆記鳍征,資料來自CC老師)