轉:圖形學 位移,旋轉,縮放矩陣變換

原文地址:https://www.jianshu.com/p/ac1b34420be7工具

遇到可讓你開竅的文章,最好保存起來,好查找,要不看完了開竅了,過兩天忘了想再看看就找不到了.net

另外一個大神的文章:http://blog.csdn.net/popy007/article/details/17971213d

 

1. 位移(translation)

對於一個三維座標(x, y, z),咱們想讓它往x軸正方向移動1個單位,往y軸正方向移動1個單位,往z軸正方向移動1個單位,則可讓它加上一個向量(1, 1, 1)orm

2. 旋轉(Rotation)

對於一個三維座標(x, y, z),讓其繞x, y, z軸旋轉θ角的方法是在其左邊乘上一個旋轉矩陣。繞x軸,繞y軸,繞z軸的旋轉矩陣分別是:blog


 
 

PS:若是咱們想更加通用一點,即點(x, y, z)繞軸(u, v, w)旋轉θ的矩陣是什麼?
若是u, v, w三者的平方和爲1,即該向量是個單位向量,那麼矩陣以下:遊戲


 
 

3. 縮放(scale)

對於一個三維座標(x, y, z),咱們想讓它擴大2倍,則可讓它變成(2x, 2y, 2z)。寫成矩陣乘法的話,V2 = M*V1,M以下圖:ci


 
 

 
 

4. 統一變換

有沒有什麼方法讓位移,旋轉,縮放都成爲統一的一種形式?
答:將三維座標轉換爲四維座標,而後使用線性變換。io

線性變換(Linear Transformation / Xforms)是渲染和遊戲引擎等圖形學工具進行座標變換的方式,是可逆的。
線性變換的等式以下:
V2 = M*V1form

  • 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)class

1. 四維位移

 
這個圖要從右向左看

從上圖中能夠看到,四維位移矩陣,是在一個四維單位矩陣(就是對角線都是1,其餘都是0的矩陣)的最後一列,放入你想要位移的向量(tx, ty, tz)

 

2. 四維旋轉

 
繞x軸轉θ

從上圖中能夠看到,四維旋轉矩陣,是在咱們上面剛說的三維繞軸旋轉矩陣的基礎上,在最後一行和最後一列補上一個(0,0,0,1)。

 

3. 四維縮放

 
從右向左看

和旋轉一個道理。

 

5. 四維變換的性質

  1. 可關聯(associative)
    你可讓一個座標乘上一個旋轉矩陣,再乘上一個位移矩陣,再乘上一個縮放矩陣,再乘上一個旋轉矩陣………………

  2. 旋轉和縮放矩陣可交換(communicative)
    先旋轉後縮放和先縮放後旋轉的結果是同樣的。RS = SR
    位移不知足交換律
    先位移再旋轉和先旋轉再位移結果是不同的!由於旋轉以後模型的正面朝向就變了,因此會向新的方向位移。
    TS!=ST, TR!=RT

  3. 對於任何一個線性變換矩陣,咱們能夠把它拆解(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的逆

 
做者:白癡毛 連接:https://www.jianshu.com/p/ac1b34420be7 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索