初识GLSL
GLSL定义
他的全称是OpenGL Shading Language 是用来在IOpenGL中着色的编程语言。也即开发人员写的短小的自定义程序,他们是在图形卡的GPU (Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性
GLSL常用名词
- 基本数据类类型
float,int,uint,bool; - 向量vec家族
常用向量有二维、三维、四维
GLSL默认数据类型为float。对应二维、三维、四维向量为 vec2、vec3、vec4
另外常用的还有int和 bool型分别用。对应二维、三维、四维向量为 ivec2、ivec3、ivec4,bvec2、bvec3、bvec4
eg:初始化一个二维向量 vec2 xy = vec(1.0,2.0); 其他类似 - 向量的使用
- 规则说明:
二维向量常见分量表示有(x,y)和(s,t)
三维向量常见分量表示有(x,y,z)和(r,g,b)
四维向量常见分量表示有(x,y,z,w)和(r,g,b,a) - 应用向量分量或者给向量赋值:
float f = xy.x;
xy.x=5.0;
- 规则说明:
- 矩阵
- mat 家族
mat2、mat3、mat4,分别表示二维、三维、四维矩阵
eg1:
mat3(1.0)表示三维单位矩阵
eg2:
mat3(vec3(1.0,2.0,3.0),vec3(6.0,2.0,9.0),vec3(4.0,2.0,1.0))这个表示这个三维矩阵的第一列是(1.0,2.0,3.0)以此类推 - 矩阵访问
eg:三维矩阵m 第一列为m[【1】 注意下标起始值 二维取值为行 下标也是从1开始
- mat 家族
- 常用变量
- Attribute
1) 只有顶点着色器中会有该修饰符
2) 他是属性修饰符
3) 他只能修饰浮点数的标量向量和矩阵变量 不能修饰其他类型 用于浮点型 - uniform
1) 一致变量限定符 一致变量:对同一组顶点组成的单个3D物体中所有的顶点都相同的量
2) 主要用于顶点和片元着色器
3) 可以修饰所有的基本数据类型 - varying
1) 用来传递顶点着色器终点额数据到片元着色器中 - in 标志数据是输入
- out 标志数据是输出
- inout 既可以做输入又可以做输出
- Attribute
- GLSL简例
uinfrom mat4 uMVPMatrix; //一致变量修饰的四维矩阵
attruibte vec3 aPosition;//顶点着色器 属性修饰符修饰三维向量
attruibte vec2 aTexCoor;//属性修饰符修饰二维向量
varying vec2 vTextureCoord; //顶点着色器和片元着色器之间传值用varying 修饰
void positionShift(){//函数必须在调用之前实现
gl_Position = uMVPMatrix * vec4(aPosition,1);
void main(){ //主函数
positionShift(); //函数调用
vTextureCoord = aTexCoor; //赋值
}