最初,物體在模型空間中,通過模型變換改變了物體的位置和朝向,物體被變換到世界空間。
按照變換順序,應該先旋轉後平移,對於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是正交矩陣。座標軸是一組正交基,向量空間中所有向量都可以用這組正交基線性表出。
3D幾何流水線之模型變換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.