着色语言
- GLSL(OpenGL Shading Language) 和C语言非常类似
- Metal Shading Language 和C++11.0类似 共同基于C/C++;语法相似,过程原理是非常类似.
变量和数据类型
基本数据类型
- 整型(有符号/无符号)
- 浮点数(单精度)
- 布尔值
- 向量类型/矩阵类型
注意 GLSL没有指针!xcode上面表示的只是字符串
//true/false
bool bDone = false;
int iValue = 42;
uint uiValue = 32u;
float fValue = 3.14159f;
-
向量/分量类型
image.png
- 向量的使用
//1.声明4分量的float向量
vec4 v1;
//2.声明4分量并构成它
vec4 v2 = vec4(1,2,3,4); vec4 v3 = vec4(0,0,0,0);
//3.向量运算
//向量相加
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;
//不可以如下:xt不允许混合
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);
矩阵类型
-
向量类型不同,所有的矩阵类型只支持浮点数.不支持整数,bool类型
image.png
mat4 m1;
vec4 v2;
vec4 vOutPos ;
//矩阵可以与向量相乘,应用顶点模型/投影矩阵变化时
m1 = 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,
)
vOutPos = v2 * m1;
m1 = mat4(1.0f);
网友评论