上文链接:OpenGL ES之路01-GLSL语言(上) - 简书
5.向量和矩阵内的元素访问
1)什么是分量
分量就是聚合类型中的一个元素。
2)分量名称三种形式的集合(向量)
分量名称三种形式的集合(向量)齐次坐标的含义:将一个原本是n维的向量,用n+1维来表示。
例如:(8,4,2)和(4,2,1)中 如果说第三个分量是齐次坐标,则这两个点位置是一样的,都用来表示二维点(4,2)
3)向量与矩阵中的元素访问方式?
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]; //获取指定数
float s=m[1].y;
6.结构体
1)定义
从逻辑上将不同的类型的数据类型组合到一个数据集合中
2)作用
方便使用,简化运算。
3)定义一个结构体
struct info{
vec3 color;
vec4 xyzw;
cev2 st;
}
4)采样器
采样器7.数组
1)定义:有限个类型相同的变量集合
2)特性及注意事项
①.GLSL支持任意类型数组,包括结构体
②.数组的索引是从零开始的,负数索引和超范围索引都是不行的
③.数组可以定义大小,或者没有大小
float c[3]; float [3]c; int index[]; //未定义数组,稍候可以重新声明
④.数组属于GLSL中的第一等类型:数组在GLSL里面是有构造函数的,并且还可以用作函数的参数和返回类型,可以静态初始化一个数组的值。
float c[3]=float[3](1.1,1.2,1.3);
⑤.多维数组
float c[3][5];
c[2][1]=2.0;
c.length();//获取长度
c[2].length();
8.类型修饰符
1)attribute
一般用于每个顶点都各不相同的数据,例如:颜色、顶点
①.只有顶点着色器中才会使用。
②.是属性限定符
③.只能用来修饰浮点数的标量、向量、矩阵变量,不能用于修饰其他类型
2)unifrom
一致变量限定符。一致变量:对同一组顶点组成的单个3D物体中所有的顶点都相同的量
①.主要出现在顶点和片元着色器中
②.可以修饰所有的基本数据类型
3)verying
用来传递顶点着色器中的数据到片元着色器中
4)const
加入后变量值不可变,常亮,编译时变量
编译时变量:在声明的时候要进行初始化,编译器在编译的时候不需要给他分配任何运行时的资源。
例如:const float PI=3.14;
5)in和out
用in修饰的变量代表输入变量,用out修饰的代表输出变量
6)inout
用来修饰参数为输入输出参数,同时具有两种功能
9.语句
1)操作符重载
例如向量和矩阵间乘法:vec3 v; mat3 m; vec3 r=v*m;(矩阵和向量维度必须匹配)
2)控制流
if(){}else{} switch
3)循环语句
for(){} while(){} do{}while()
4)流控制语句
break; return; continue;
discard;(丢弃当前片元,终止片元着色器执行,只能用于偏于着色器中)
网友评论