計算機圖形學 - 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}$ |
| 旋轉矩陣 | ||