《Real-Time Rendering》第四章:變換

weixin_34249678發表於2018-12-07
  1. 一個變換是以某種方式轉換點,向量或顏色等實體的操作;
  2. 一個線性變換是滿足向量加法和標量乘法的操作;
  3. 縮放變換和旋轉變換都是線性變換;
  4. 平移變換不是線性變換;
  5. 線性變換和平移的組合可以使用一個仿射變換,通常用一個4x4矩陣儲存;
  6. 一個方向向量表示為v=(vx vy vz 0)T,一個點表示為v=(vx vy vz 1)T;
  7. 所有的平移,旋轉,縮放,鏡面反射和切變矩陣都是仿射的;
  8. 放射矩陣的一個特點是它保持直線的平行,但不保持長度和角度;
  9. 一個仿射變換可以是任意多個獨立的仿射變換的串聯;

4.1 基本變換

4.1.1 平移

詳見56頁...

4.1.2 旋轉

  1. 和平移一樣,以座標軸旋轉是一個剛體變換,它保持頂點之間的距離,以及保持左右手習慣;
  2. 其他詳見57頁...

4.1.3 縮放

詳見59頁...

4.1.4 切變

詳見60頁...

4.1.5 變換的串聯

  1. 因為矩陣乘法不滿足交換律,所以矩陣的順序會影響結果;

4.1.6 剛體變換

  1. 只有物體的朝向和位置改變,形狀不變,如一個只有平移和旋轉組合的變換,叫做剛體變換
  2. 剛體矩陣的形式和逆矩陣見62頁;

4.1.7 法線變換

一個單一矩陣可以一致的變換點,直線,多邊形和其他幾何體。同樣的矩陣也可以變換沿著直線或多邊形表面的切線。然而,這個矩陣不是都可以變換一個重要的幾何屬性,表面法向量。如圖4.5.

合適的方法是使用矩陣的伴隨矩陣的轉置矩陣,而不是乘以矩陣本身。伴隨矩陣通常是可以保證存在的。法線在變換後不保證是單位長度,因此一般需要正則化。

後面將了法線變換的一些簡化,詳見64頁...

4.1.8 逆矩陣的計算

  1. 如果矩陣是一個單一矩陣或一系列給定引數的簡單矩陣,那麼逆矩陣可以簡單的“對引數取反”和調換矩陣順序。如M = T(t)R(φ),那麼M−1 = R(−φ)T(−t);
  2. 如果矩陣是正交矩陣,則M−1 = MT,也就是說,轉置矩陣就是逆矩陣。任何旋轉序列都是一個旋轉,因此它是正交的;
  3. 如果沒有任何特殊資訊可知,那麼就用伴隨矩陣的方法...

4.2 特殊的矩陣變換和操作

4.2.1 尤拉變換

  1. 首先需要建立預設的觀察方向。大部分是面向負z軸方向,頭頂朝向y軸方向,如圖4.6;
  2. 尤拉變換是三個矩陣相乘的結果,見公式4.17;
  3. 改變head角相當於觀察者搖頭,改變pitch相當於他點頭,rolling相當於他把他的頭傾斜到一邊;
  4. 經典萬惡的萬向鎖問題,在第67頁...

4.2.3 矩陣分解

  1. 檢索平移矩陣很容易,我們只需要4x4矩陣的最後一列;
  2. 我們可以通過檢查行列式是否為負,來判斷是否有映象矩陣;
  3. 分離旋轉,縮放和切變需要更多努力,但有很多現成的程式碼...

4.2.4 以任意軸旋轉

  1. 如我們要圍繞向量r旋轉,可以構建一個正交基座標系,以r為其中一個軸(如x軸),另外兩個軸見書上71頁;
  2. 然後用三個正交基構建一個矩陣M;
  3. 先乘以M,然後繞x軸旋轉α角,然後在乘以M的轉置矩陣,轉回來...

4.3 四元數

先略過...

4.4 頂點混合

相關文章