原文地址:https://www.jianshu.com/p/ac1b34420be7工具
遇到可讓你開竅的文章,最好保存起來,好查找,要不看完了開竅了,過兩天忘了想再看看就找不到了.net
另外一個大神的文章:http://blog.csdn.net/popy007/article/details/17971213d
對於一個三維座標(x, y, z),咱們想讓它往x軸正方向移動1個單位,往y軸正方向移動1個單位,往z軸正方向移動1個單位,則可讓它加上一個向量(1, 1, 1)orm
對於一個三維座標(x, y, z),讓其繞x, y, z軸旋轉θ角的方法是在其左邊乘上一個旋轉矩陣。繞x軸,繞y軸,繞z軸的旋轉矩陣分別是:blog
PS:若是咱們想更加通用一點,即點(x, y, z)繞軸(u, v, w)旋轉θ的矩陣是什麼?
若是u, v, w三者的平方和爲1,即該向量是個單位向量,那麼矩陣以下:遊戲
對於一個三維座標(x, y, z),咱們想讓它擴大2倍,則可讓它變成(2x, 2y, 2z)。寫成矩陣乘法的話,V2 = M*V1,M以下圖:ci
有沒有什麼方法讓位移,旋轉,縮放都成爲統一的一種形式?
答:將三維座標轉換爲四維座標,而後使用線性變換。io
線性變換(Linear Transformation / Xforms)是渲染和遊戲引擎等圖形學工具進行座標變換的方式,是可逆的。
線性變換的等式以下:
V2 = M*V1form
對於三維座標(x, y, z),將其轉換爲四維座標,能夠直接加個1,即變成(x, y, z, 1)
對於四維座標(x, y, z, w),都除以w便可轉換爲三維座標,即(x/w, y/w, z/w)class
1. 四維位移
2. 四維旋轉
3. 四維縮放
可關聯(associative)
你可讓一個座標乘上一個旋轉矩陣,再乘上一個位移矩陣,再乘上一個縮放矩陣,再乘上一個旋轉矩陣………………
旋轉和縮放矩陣可交換(communicative)
先旋轉後縮放和先縮放後旋轉的結果是同樣的。RS = SR
位移不知足交換律
先位移再旋轉和先旋轉再位移結果是不同的!由於旋轉以後模型的正面朝向就變了,因此會向新的方向位移。
TS!=ST, TR!=RT
對於任何一個線性變換矩陣,咱們能夠把它拆解(decompose)爲TRS或TSR三個矩陣的乘積的形式。
1)首先提取最後一列,獲得位移
2)剩餘的矩陣是R和S相乘的矩陣
咱們能夠先看一下S和R相乘的結果是什麼樣的
因爲線性變換是可逆的,因此咱們能夠看一下位移旋轉縮放的逆矩陣。
1. 位移
T的逆矩陣是-T,即向反方向移動。
2. 旋轉
R的逆矩陣是R的轉置矩陣,即以對角線翻轉矩陣。
怎麼理解呢?好比R是繞X軸旋轉θ,那麼逆操做就是繞X軸旋轉-θ,帶入-θ就會發現它變成了轉置矩陣。
3. 縮放
S的逆矩陣是1/S,即把對角線上的三個元素都變成倒數,即反向縮放。
4. 線性變換Xforms
TSR的逆矩陣 = R的逆×S的逆×T的逆