3D幾何流水線之模型變換

最初,物體在模型空間中,通過模型變換改變了物體的位置和朝向,物體被變換到世界空間。

按照變換順序,應該先旋轉後平移,對於opengl的規則,是TR X V。
矩陣T,R都是4X4的,T中只有第4列有效,其他是單位陣的排列,R中是前3X3子陣有效,其他是單位陣排列,將TR相乘:

| 1 0 0 Tx |     | Ux Vx Nx 0 |      | Ux Vx Nx Tx |
| 0 1 0 Ty |  X | Uy Vy Ny 0 |  =  | Uy Vy Ny Ty |
| 0 0 1 Tz |     | Uz Vz Nz 0 |      | Uz Vz Nz Tz |
| 0 0 0 1   |     | 0   0   0   1 |      | 0    0   0    1  |

可見,在最後得到的4X4 TR矩陣中,等於是把3X3 UVN矩陣填到平移矩陣中,這兩個矩陣相乘時互相沒有影響對方。其實UVN表示座標系的映射—用(1,0,0)T, (0,1,0)T, (0,0,1)T分別右乘UVN矩陣,得到的列向量正是UVN的3列,這就是說三個座標軸被UVN矩陣變換到世界座標系中了,而UVN的3列表示的正是x,y,z軸在世界座標系下的向量。

再加上縮放變換,先看一下R X S :

|Ux Vx Nx 0|    | Sx 0    0    0 |      | UxSx VxSy NxSz 0   |
|Uy Vy Ny 0| X | 0   Sy  0    0 | =  | UySx VySy NySz 0  |
|Uz Vz Nz 0|    | 0   0    Sz  0 |      | UzSx VzSy NzSz 0   |
|0   0    0   1|    | 0   0    0    1 |    | 0        0       0     1   |

那麼最終的 T X R X S就是:
| UxSx VxSy NxSz  Tx   |
| UySx VySy NySz  Ty  |
| UzSx VzSy NzSz  Tz   |
| 0        0       0     1     |

可見縮放矩陣的作用是分別對三個座標軸進行縮放。這個4X4矩陣,第4列是平移變換,3X3部分是縮放和座標軸變換。因爲座標軸是單位向量,所以求3X3每列的模就得到相應的縮放值。

如果是把物體從世界座標空間變回到模型空間,那麼逆矩陣就是:
(TRS)-1 = S-1 X R-1 X T-1
   | 1/Sx  0       0       0 |       |  Ux Uy Uz 0 |    | 1 0 0 -Tx |    |  Ux/Sx Uy/Sx  Uz/Sx   (U' dot -T) |
= |  0     1/Sy   0       0 |  X   |  Vx Vy Vz 0 | X | 0 1 0 -Ty | = | Vx/Sy  Vy/Sy Vz/Sy   (V' dot -T) |
   |  0      0       1/Sz   0|       |  Nx Ny Nz 0 |    | 0 0 1 -Tz |    | Nx/Sz   Ny/Sz  Nz/Sz  (N' dot -T) |
   |  0      0       0        1|       |   0   0   0  1|    |  0 0 0   1 |    | 0           0        0                1       |

其中 U', V', N'是U,V,N分別乘以1/Sx, 1/Sy, 1/Sz
這個4X4的逆變換矩陣就不是沒影響啦,第4列是U', V', N'和-T的點積,計算這種逆矩陣時要注意,不能直接填-T的!這個逆矩陣是不能直接“填”出來的,3X3部分每一行是逆縮放後的座標軸,第4列是前面矩陣每一列和-T的點積

至於爲什麼UVN矩陣的逆就是他的轉置,因爲UVN是正交矩陣。座標軸是一組正交基,向量空間中所有向量都可以用這組正交基線性表出。

發佈了7 篇原創文章 · 獲贊 11 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章