计算机图形学 - 3D变换
旋转
三维旋转与二维旋转不同。在三维旋转中,我们必须指定旋转角度以及旋转轴。我们可以绕X、Y和Z轴进行三维旋转。它们以矩阵形式表示如下:
$$R_{x}(\theta) = \begin{bmatrix} 1& 0& 0& 0\\ 0& \cos\theta & -\sin\theta& 0\\ 0& \sin\theta & \cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix} R_{y}(\theta) = \begin{bmatrix} \cos\theta& 0& \sin\theta& 0\\ 0& 1& 0& 0\\ -\sin\theta& 0& \cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix} R_{z}(\theta) =\begin{bmatrix} \cos\theta & -\sin\theta & 0& 0\\ \sin\theta & \cos\theta & 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}$$
下图解释了绕不同轴的旋转:
缩放
可以使用缩放变换来改变对象的大小。在缩放过程中,您可以扩展或压缩对象的尺寸。缩放可以通过将对象的原始坐标乘以缩放因子来获得所需的结果。下图显示了三维缩放的效果:
在三维缩放操作中,使用三个坐标。假设原始坐标为(X, Y, Z),缩放因子分别为$(S_{X}, S_{Y}, S_{Z})$,生成的坐标为(X', Y', Z')。这可以用下面的数学公式表示:
$S = \begin{bmatrix} S_{x}& 0& 0& 0\\ 0& S_{y}& 0& 0\\ 0& 0& S_{z}& 0\\ 0& 0& 0& 1 \end{bmatrix}$
P’ = P∙S
$[{X}' \:\:\: {Y}' \:\:\: {Z}' \:\:\: 1] = [X \:\:\:Y \:\:\: Z \:\:\: 1] \:\: \begin{bmatrix} S_{x}& 0& 0& 0\\ 0& S_{y}& 0& 0\\ 0& 0& S_{z}& 0\\ 0& 0& 0& 1 \end{bmatrix}$
$ = [X.S_{x} \:\:\: Y.S_{y} \:\:\: Z.S_{z} \:\:\: 1]$
错切
使物体形状倾斜的变换称为错切变换。与二维错切一样,我们可以在三维空间中沿X轴、Y轴或Z轴错切物体。
如上图所示,有一个坐标P。您可以将其错切以获得新的坐标P',这可以用三维矩阵形式表示如下:
$Sh = \begin{bmatrix} 1 & sh_{x}^{y} & sh_{x}^{z} & 0 \\ sh_{y}^{x} & 1 & sh_{y}^{z} & 0 \\ sh_{z}^{x} & sh_{z}^{y} & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}$
P’ = P ∙ Sh
$X’ = X + sh_{x}^{y} Y + sh_{x}^{z} Z$
$Y' = sh_{y}^{x}X + Y +sh_{y}^{z}Z$
$Z' = sh_{z}^{x}X + sh_{z}^{y}Y + Z$
变换矩阵
变换矩阵是变换的基本工具。一个n x m维的矩阵与对象的坐标相乘。通常使用3 x 3或4 x 4矩阵进行变换。例如,考虑以下用于各种操作的矩阵。
$T = \begin{bmatrix} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\ t_{x}& t_{y}& t_{z}& 1\\ \end{bmatrix}$ | $S = \begin{bmatrix} S_{x}& 0& 0& 0\\ 0& S_{y}& 0& 0\\ 0& 0& S_{z}& 0\\ 0& 0& 0& 1 \end{bmatrix}$ | $Sh = \begin{bmatrix} 1& sh_{x}^{y}& sh_{x}^{z}& 0\\ sh_{y}^{x}& 1 & sh_{y}^{z}& 0\\ sh_{z}^{x}& sh_{z}^{y}& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}$ |
平移矩阵 | 缩放矩阵 | 错切矩阵 |
$R_{x}(\theta) = \begin{bmatrix} 1& 0& 0& 0\\ 0& \cos\theta & -\sin\theta& 0\\ 0& \sin\theta & \cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix}$ | $R_{y}(\theta) = \begin{bmatrix} \cos\theta& 0& \sin\theta& 0\\ 0& 1& 0& 0\\ -\sin\theta& 0& \cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix}$ | $R_{z}(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0& 0\\ \sin\theta & \cos\theta & 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}$ |
旋转矩阵 |