变换矩阵(Transformation matrix):一个mat4类型的变量
<script id="vShader" type="x-shader/x-vertex">
attribute vec4 a_Position;
uniform mat4 u_MatrixFour;
void main(){
gl_Position=u_MatrixFour*a_Position;
}
</script>
新坐标 = 变换矩阵 * 旧坐标
(因为矩阵乘法原则,变换矩阵必须写在前面)
其中新旧坐标的w=1,由上式可知:
x1 = a * x + b * y +c * z + d ;
y1 = e * x + f * y +g * z + h ;
z1 = i * x + j * y +k * z + l ;
1 = m * x + n * y + o * z +p ;
如果没有图形变换,则有
x1=x,y1=y,z1=z,
则可设原始变换矩阵为
平移:
因为平移就是对应坐标相加减
所以可以有
x1 = x + d ;
y1 = y + h ;
z1 = z + l ;
则有
所以在矩阵中只需要改变d,h,l(即第四列)的值即可。
旋转:
由基本旋转方式可知(具体可参考第四节),以绕z轴旋转为例
x1 = x * cosB - y * sinB ;
y1 = x * sinB + y * cosB ;
则有·,其中a = cosB,b = -sinB,e = sinB,f = cosB
缩放:
缩放就是把对应坐标放大或缩小相应的倍数(n),一般选择a,f,k的值作改变
x1=n * x = a * x;
y1=n * y = f * y;
z1=n * z = k * z;