点操作
3D空间中的点可以通过x,y,z的值来表示(注意在OpenGL中的3D坐标系大都是右手坐标系,而Direct3D中的坐标系大都是左手坐标系)。不过用齐次坐标来表示点会使计算更高效。在每个点的齐次坐标有4个值,前三个值表示x、y和z,第四个值w总是非零值,通常为1.
用来存储齐次3D坐标的GLSL数据类型是vec4。这里的vec代表向量,同时也可以用来表示点。
向量操作
在3D图形学中,向量一般用空间中的某个点表示,向量的大小是原点到该点的距离,方向则是原点到该点的方向。
许多图形系统并不区分点和向量,如GLSL中提供的vec3和vec4类型技能用来存储点,又能用来存储向量。在GLSL中有许多3D图形学中经常用到的向量操作。如假设有向量A(u,v,w)和B(x,y,x),可得如下操作:
加法:vec3+vec3
减法:vec3-vec3
归一化(将长度变为1):normalize(vec3)或normalize(vec4)
点积:dot(vec3, vec3)或dot(vec4, vec4)
外积(叉积):cross(vec3, vec3)
矩阵操作:
1)GLSL中的mat4数据类型用来存储4x4矩阵;初始化mat4矩阵的语法以列为单位读入值,其前4个参数会放入第一列,接下来的4个参数放入下一列,直到第四列。
2)GLSL库中矩阵的转置函数为transpose(mat4)。
3)GLSL中"+"运算符在mat4上进行了重载,以支持矩阵的加法。
4)GLSL中支持点(vec4)与矩阵相乘,并使用*操作符表示。
5)GLSL中支持使用重载后的"*"运算符计算矩阵乘法
6)GLSL中提供了计算一个矩阵的逆矩阵操作函数mat4.inverse()
......