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

下圖解釋了繞不同軸的旋轉:

Rotation 3D Rotation

縮放

可以使用縮放變換來改變物件的大小。在縮放過程中,您可以擴充套件或壓縮物件的尺寸。縮放可以透過將物件的原始座標乘以縮放因子來獲得所需的結果。下圖顯示了三維縮放的效果:

3D Scaling

在三維縮放操作中,使用三個座標。假設原始座標為(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軸錯切物體。

Shear

如上圖所示,有一個座標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}$
旋轉矩陣
廣告
© . All rights reserved.