1. 位移(translation)
對於一個三維坐標(x, y, z),我們想讓它往x軸正方向移動1個單位,往y軸正方向移動1個單位,往z軸正方向移動1個單位,則可以讓它加上一個向量(1, 1, 1)
2. 旋轉(Rotation)
對於一個三維坐標(x, y, z),讓其繞x, y, z軸旋轉θ角的方法是在其左邊乘上一個旋轉矩陣。繞x軸,繞y軸,繞z軸的旋轉矩陣分別是:

PS:如果我們想更加通用一點,即點(x, y, z)繞軸(u, v, w)旋轉θ的矩陣是什么?
如果u, v, w三者的平方和為1,即該向量是個單位向量,那么矩陣如下:

3. 縮放(scale)
對於一個三維坐標(x, y, z),我們想讓它擴大2倍,則可以讓它變成(2x, 2y, 2z)。寫成矩陣乘法的話,V2 = M*V1,M如下圖:


4. 統一變換
有沒有什么方法讓位移,旋轉,縮放都成為統一的一種形式?
答:將三維坐標轉換為四維坐標,然后使用線性變換。
線性變換(Linear Transformation / Xforms)是渲染和游戲引擎等圖形學工具進行坐標變換的方式,是可逆的。
線性變換的等式如下:
V2 = M*V1
- V是齊次(homogeneous)四維向量(x,y,z,w),豎着寫的
- M是齊次4×4矩陣
- 當w=1時,四維坐標會變成三維坐標
對於三維坐標(x, y, z),將其轉換為四維坐標,可以直接加個1,即變成(x, y, z, 1)
對於四維坐標(x, y, z, w),都除以w即可轉換為三維坐標,即(x/w, y/w, z/w)
1. 四維位移

從上圖中可以看到,四維位移矩陣,是在一個四維單位矩陣(就是對角線都是1,其他都是0的矩陣)的最后一列,放入你想要位移的向量(tx, ty, tz)
2. 四維旋轉

從上圖中可以看到,四維旋轉矩陣,是在我們上面剛說的三維繞軸旋轉矩陣的基礎上,在最后一行和最后一列補上一個(0,0,0,1)。
3. 四維縮放

和旋轉一個道理。
5. 四維變換的性質
-
可關聯(associative)
你可以讓一個坐標乘上一個旋轉矩陣,再乘上一個位移矩陣,再乘上一個縮放矩陣,再乘上一個旋轉矩陣……………… -
旋轉和縮放矩陣可交換(communicative)
先旋轉后縮放和先縮放后旋轉的結果是一樣的。RS = SR
位移不滿足交換律
先位移再旋轉和先旋轉再位移結果是不一樣的!因為旋轉之后模型的正面朝向就變了,所以會向新的方向位移。
TS!=ST, TR!=RT -
對於任何一個線性變換矩陣,我們可以把它拆解(decompose)為TRS或TSR三個矩陣的乘積的形式。
1)首先提取最后一列,得到位移
2)剩余的矩陣是R和S相乘的矩陣
我們可以先看一下S和R相乘的結果是什么樣的
SR相乘, 以Z軸旋轉為例
從圖中可以看出,SR矩陣,第一行的平方和開根就是Sx,第二行的平方和開根就是Sy,第三行的平方和開根就是Sz。第一行除以Sx,第二行除以Sy,第三行除以Sz,即可得到旋轉矩陣。
6. 四維變換的逆變換
由於線性變換是可逆的,所以我們可以看一下位移旋轉縮放的逆矩陣。
1. 位移
T的逆矩陣是-T,即向反方向移動。
2. 旋轉
R的逆矩陣是R的轉置矩陣,即以對角線翻轉矩陣。
怎么理解呢?比如R是繞X軸旋轉θ,那么逆操作就是繞X軸旋轉-θ,帶入-θ就會發現它變成了轉置矩陣。
3. 縮放
S的逆矩陣是1/S,即把對角線上的三個元素都變成倒數,即反向縮放。
4. 線性變換Xforms
TSR的逆矩陣 = R的逆×S的逆×T的逆