第三章、矩阵变换
本章讲解三维变换的基本知识,了解三维变换的数学表示及其在图形学中的意义。
目标:
- 基本矩阵变换:平移、缩放、旋转
- XNA库中的矩阵变换函数
- 学习几何变换的组合
3.1 基本变换
矩阵变换中最为基础的三种是:平移、缩放、旋转。每一种变换对应一类矩阵,每类矩阵都有其鲜明的特征。此处介绍使用四维矩阵表示三维变换。因为三维矩阵只能表示三维线性变换(旋转和缩放),不能表示平移、透视投影等,这也是第一章介绍齐次坐标系的意义。
基本的矩阵变换形式为:
pM=(x,y,z,w)∣∣∣∣∣∣a00a10a20a30a01a11a21a31a02a12a22a32a03a13a23a33∣∣∣∣∣∣=(x′,y′,z′,w′)=p′(1)
这样的坐标变换可以看作
p
在同一坐标系中的位置变化,也可以看作
p
在从一个坐标系变换到另一个坐标系。(即可以认为是点或向量
p
在坐标系中移动,也可以认为是坐标系本身在移动)。
3.1.1 平移变换
平移变换是针对点的变换,向量的平移没有意义。
假设点
p=(x,y,z,1)
移动
u=(ux,uy,uz)
, 到
p′=(x+ux,y+uy,z+uz,1)
,该平移过程可用如下变换矩阵完成:
Mt=∣∣∣∣∣∣100ux010uy001uz0001∣∣∣∣∣∣(2)
即:
pMt=(x,y,z,w)∣∣∣∣∣∣100ux010uy001uz0001∣∣∣∣∣∣=(x+ux,y+uy,z+uz,1)=p+u=p′(3)
有趣的是,
Mt
的逆矩阵很容易求得,由于
pMtM−1t=p
, 可以得到:
M−1t=∣∣∣∣∣∣100−ux010−uy001−uz0001∣∣∣∣∣∣(4)
3.1.2 旋转变换
经常需要将几何体绕某一轴旋转某一角度。绕任意轴旋转矩阵比较复杂,但可以通过分解变成绕XYZ轴的旋转及平移变换。因此首先介绍绕XYZ轴的旋转矩阵。
在左、右手坐标系中,旋转的正方向都是:当拇指指向旋转轴正方向时,四指环绕的方向就是旋转的正方向。
当基本变换矩阵形式为以下形式时:
pM=(x,y,z,w)∣∣∣∣∣∣a00a10a20a30a01a11a21a31a02a12a22a32a03a13a23a33∣∣∣∣∣∣=(x′,y′,z′,w′)=p′(5)
绕三个轴旋转角度
θ
的变换矩阵分别为:
Mx=∣∣∣∣∣∣10000cosθ−sinθ00sinθcosθ00001∣∣∣∣∣∣(6)
My=∣∣∣∣∣∣cosθ0sinθ00100−sinθ0cosθ00001∣∣∣∣∣∣(7)
Mz=∣∣∣∣∣∣cosθ−sinθ00sinθcosθ0000100001∣∣∣∣∣∣(8)
旋转矩阵有一个很重要的性质,即旋转矩阵都是正交矩阵,而对于正交矩阵,有
MT=M−1
。
绕任意轴,旋转
θ
角度可以由绕坐标轴的旋转组合而成。
旋转轴方向矢量:
v=p2−p1=(x2−x1,y2−y1,z2−z1)
.
旋转轴单位向量:
u=v||v||=(a,b,c)
.
要得到绕任意轴旋转
θ
角度的变换矩阵,有以下5个步骤:
- 平移物体,使旋转轴通过坐标原点
- 旋转物体使得旋转轴与某一坐标轴重合。
- 绕坐标轴完成指定旋转
- 利用逆旋转矩阵使旋转轴回到原始方向
- 利用逆平移使旋转轴回到初始位置。
3.1.3 缩放变换
缩放变换用来改变几何体的大小。
将点p沿x、y、z轴分别缩放
sx,sy,sz
的变换矩阵为:
S=∣∣∣∣∣∣sx0000sy0000sz00001∣∣∣∣∣∣(9)
缩放矩阵的逆矩阵为:
S−1=∣∣∣∣∣∣∣1sx00001sy00001sz00001∣∣∣∣∣∣∣(10)
3.2 XNA矩阵变换函数
XNA数学库提供了一些矩阵变换的支持函数,这些函数使用方便且效率很高,主要有:
- 平移变换矩阵
- 缩放变换矩阵
- 旋转变换矩阵
3.3 几何变换的组合
使用
4×4
矩阵形式表示所有变换的优点是:可以借助于矩阵乘法将多个相同类型或不同类型的变换组合成为一个变换矩阵。如:
p′=pM1M2M3M4(11)
表示点p依次进行
M1M2M3M4
变换。