上一篇 Unity Shader前置知识(3) —— 特殊矩阵
在Unity或其它三维软件中,一个物体常常能被旋转、缩放和平移,然而这些操作,就是通过矩阵变换来解决的。
1. 线性变换
线性变换(linear transfom)是指那些可以保留向量加和标量乘的变换。用数学公式表示就是:
线性变换包括对三维物体的缩放(scale)、旋转(rotation)等,如果要对三维矢量进行变换,那么仅仅使用 3 × 3 的矩阵就可以表示所有的线性变换。
2. 仿射变换
仿射变换(affine transform)就是合并线性变换和平移变换的变换类型。由于我们不能使用一个 3 × 3 的矩阵来表示平移变换,所以我们就将其扩展到了 4 × 4 的矩阵(多一个维度来实现对平移的表示),称为齐次矩阵:
3. 平移矩阵
我们可使用矩阵乘法来表示对一个三维空间的点进行平移变换:
在上面的式子中,、、分别表示x、y、z坐标的偏移量,从结果很容易看出这个矩阵有平移的效果。例如,假设有点(1,2,3),我们将其平移(2,3,4),则计算式子如下:
可见最后计算出的平移结果为(3,5,7)。
4. 缩放矩阵
我们同样可以使用矩阵乘法来表示一个缩放变换:
在上面的式子中,、、分别表示x、y、z坐标的缩放倍数。如果缩放系数 ,我们把这样的缩放称为统一缩放(uniform scale),否则称为非统一缩放(nonuniform scale)。
5. 旋转矩阵
我们知道,旋转操作需要指定一个旋转轴,如果我们需要把点绕着x轴旋转θ度,可以使用下面的矩阵:
绕y轴旋转:
绕z轴旋转: