1. 位移(translation)
對于一個(gè)三維坐標(biāo)(x, y, z)显歧,我們想讓它往x軸正方向移動(dòng)1個(gè)單位仪或,往y軸正方向移動(dòng)1個(gè)單位,往z軸正方向移動(dòng)1個(gè)單位士骤,則可以讓它加上一個(gè)向量(1, 1, 1)
2. 旋轉(zhuǎn)(Rotation)
對于一個(gè)三維坐標(biāo)(x, y, z)范删,讓其繞x, y, z軸旋轉(zhuǎn)θ角的方法是在其左邊乘上一個(gè)旋轉(zhuǎn)矩陣。繞x軸拷肌,繞y軸到旦,繞z軸的旋轉(zhuǎn)矩陣分別是:
PS:如果我們想更加通用一點(diǎn),即點(diǎn)(x, y, z)繞軸(u, v, w)旋轉(zhuǎn)θ的矩陣是什么巨缘?
如果u, v, w三者的平方和為1添忘,即該向量是個(gè)單位向量,那么矩陣如下:
3. 縮放(scale)
對于一個(gè)三維坐標(biāo)(x, y, z)若锁,我們想讓它擴(kuò)大2倍搁骑,則可以讓它變成(2x, 2y, 2z)。寫成矩陣乘法的話,V2 = M*V1仲器,M如下圖:
4. 統(tǒng)一變換
有沒有什么方法讓位移煤率,旋轉(zhuǎn),縮放都成為統(tǒng)一的一種形式乏冀?
答:將三維坐標(biāo)轉(zhuǎn)換為四維坐標(biāo)蝶糯,然后使用線性變換。
線性變換(Linear Transformation / Xforms)是渲染和游戲引擎等圖形學(xué)工具進(jìn)行坐標(biāo)變換的方式煤辨,是可逆的裳涛。
線性變換的等式如下:
V2 = M*V1
- V是齊次(homogeneous)四維向量(x,y,z,w),豎著寫的
- M是齊次4×4矩陣
- 當(dāng)w=1時(shí)众辨,四維坐標(biāo)會(huì)變成三維坐標(biāo)
對于三維坐標(biāo)(x, y, z)端三,將其轉(zhuǎn)換為四維坐標(biāo),可以直接加個(gè)1鹃彻,即變成(x, y, z, 1)
對于四維坐標(biāo)(x, y, z, w)郊闯,都除以w即可轉(zhuǎn)換為三維坐標(biāo),即(x/w, y/w, z/w)
1. 四維位移
從上圖中可以看到蛛株,四維位移矩陣团赁,是在一個(gè)四維單位矩陣(就是對角線都是1,其他都是0的矩陣)的最后一列谨履,放入你想要位移的向量(tx, ty, tz)
2. 四維旋轉(zhuǎn)
從上圖中可以看到欢摄,四維旋轉(zhuǎn)矩陣,是在我們上面剛說的三維繞軸旋轉(zhuǎn)矩陣的基礎(chǔ)上笋粟,在最后一行和最后一列補(bǔ)上一個(gè)(0怀挠,0,0害捕,1)绿淋。
3. 四維縮放
和旋轉(zhuǎn)一個(gè)道理。
5. 四維變換的性質(zhì)
可關(guān)聯(lián)(associative)
你可以讓一個(gè)坐標(biāo)乘上一個(gè)旋轉(zhuǎn)矩陣尝盼,再乘上一個(gè)位移矩陣吞滞,再乘上一個(gè)縮放矩陣,再乘上一個(gè)旋轉(zhuǎn)矩陣………………旋轉(zhuǎn)和縮放矩陣可交換(communicative)
先旋轉(zhuǎn)后縮放和先縮放后旋轉(zhuǎn)的結(jié)果是一樣的盾沫。RS = SR
位移不滿足交換律
先位移再旋轉(zhuǎn)和先旋轉(zhuǎn)再位移結(jié)果是不一樣的裁赠!因?yàn)樾D(zhuǎn)之后模型的正面朝向就變了,所以會(huì)向新的方向位移赴精。
TS!=ST, TR!=RT-
對于任何一個(gè)線性變換矩陣组贺,我們可以把它拆解(decompose)為TRS或TSR三個(gè)矩陣的乘積的形式。
1)首先提取最后一列祖娘,得到位移
2)剩余的矩陣是R和S相乘的矩陣
我們可以先看一下S和R相乘的結(jié)果是什么樣的
從圖中可以看出失尖,SR矩陣啊奄,第一行的平方和開根就是Sx,第二行的平方和開根就是Sy掀潮,第三行的平方和開根就是Sz菇夸。第一行除以Sx,第二行除以Sy仪吧,第三行除以Sz庄新,即可得到旋轉(zhuǎn)矩陣。
6. 四維變換的逆變換
由于線性變換是可逆的薯鼠,所以我們可以看一下位移旋轉(zhuǎn)縮放的逆矩陣择诈。
1. 位移
T的逆矩陣是-T,即向反方向移動(dòng)出皇。
2. 旋轉(zhuǎn)
R的逆矩陣是R的轉(zhuǎn)置矩陣羞芍,即以對角線翻轉(zhuǎn)矩陣。
怎么理解呢郊艘?比如R是繞X軸旋轉(zhuǎn)θ荷科,那么逆操作就是繞X軸旋轉(zhuǎn)-θ,帶入-θ就會(huì)發(fā)現(xiàn)它變成了轉(zhuǎn)置矩陣纱注。
3. 縮放
S的逆矩陣是1/S畏浆,即把對角線上的三個(gè)元素都變成倒數(shù),即反向縮放狞贱。
4. 線性變換Xforms
TSR的逆矩陣 = R的逆×S的逆×T的逆