矩陣變換
? ? ? ? 變換(transform):指的是我們把一些數據,如點,方向向量甚至是顏色,通過某種方式(矩陣運算),進行轉換的過程。
? ? ? ? 變換類型
? ? ? ? ? ? ? ? 線性變換:保留矢量加和標量乘的計算
? ? ? ? ? ? ? ? ? ? ? ? f(x)+f(y)=f(x+y)
? ? ? ? ? ? ? ? ? ? ? ? kf(x)=f(kx)
? ? ? ? ? ? ? ? ? ? ? ? 包含:旋轉,縮放,鏡像,投影
? ? ? ? ? ? ? ? ? ? ? ? 可以使用3x3矩陣,表示
? ? ? ? ? ? ? ? 非線性變換
? ? ? ? ? ? ? ? ? ? ? ? 包含:平移
? ? ? ? ? ? ? ? ? ? ? ? 可以使用4x4矩陣,表示
? ? ? ? ? ? ? ? 仿射變換:仿射變換就是合并線性變換與平移變換的變換類型,仿射變換可以
????????????????使用一個4x4的矩陣表示,所以需要將矢量擴展到四維空間下,這就是齊次坐標
????????????????空間,變換矩陣稱為齊次矩陣
? ? ? ? ? ? ? ?齊次坐標:
? ? ? ? ? ? ? ? ? ? ? ? 點的列矩陣w分量:補1,因為點受到平移變化的影響
? ? ? ? ? ? ? ? ? ? ? ? 方向矢量列矩陣的w分量:補0,因為平移不會影響到方向向量的方向
? ? ? ? ? ? ? ?齊次矩陣構成
? ? ? ? ? ? ? ? ? ? ? ? ?
????????????????????????:表示線性變換矩陣
? ? ? ? ? ? ? ? ? ? ? ??:表示平移變換矩陣
? ? ? ? ? ? ? ? 平移矩陣
????????????????????????? ? ? ? ( x,y,z分別代表x平移量,y平移量,z平移量)
? ? ? ? ? ? ? ? 縮放矩陣(縮放是線性變換,所以可以用表示這個變換的過程)
????????????????????????
? ? ? ? ? ? ? ? 旋轉矩陣
? ? ? ? ? ? ? ? ? ? ? ? 繞X軸,旋轉角度
????????????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 繞Y軸,旋轉角度
????????????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 繞Z軸,旋轉角度
????????????????????????????????
? ? ? 復合變換
? ? ? ? ? ? ?一個點P(1,1,1),需要做繞z軸旋轉30度,平移(5,4,2),
?????????????縮放(3,2,1)復合變換,是存在順序的,因為矩陣乘運算,不滿足乘法交換律
?????????????????????????x?
?x?
?x?
?=?
? ? ? ? ? ? 復合變換的順序,決定了變換矩陣相乘的順序,根據需求????????
? ? ? ? ? ? ? ? ? ? ? ???x?
?x?
?x P
? ? ? ? ? ? 因為矩陣滿足結合律,所以可以得出變換矩陣為(?x
?x
)
? ? ? ? ? ? 最后的結果是:(?x
?x
)x P
坐標空間
? ? ? ? 模型空間:模型內部點的位置都存儲在模型文件內,所以點都是相對于模型空間的
? ? ? ? 世界空間:模型在游戲運行時,需要加載到場景中,所以點存儲在世界空間中
? ? ? ? 觀察(攝像機)空間:物體是否被投射到屏幕中,是由相機控制的,相機相對于物體
????????????????的位置,決定了顯示效果。
? ? ? ? 裁剪空間:需要判定點,是否存在于攝像機裁剪視錐體下,如果存在于視錐體內,則
????????????????點可以進行顯示。
? ? ? ? 屏幕空間:最終顯示的設備為顯示器,所以需要將點投影到顯示器上,算出屏幕坐標
????????????????點,由顯示器顯示
Unity著色器中常見矩陣
? ? ? ? UNITY_MATRIX_MVP:將點從模型空間下,轉換到裁剪空間下
? ? ? ? UNITY_MATRIX_M:將點從模型空間下,轉換到世界空間下
? ? ? ? UNITY_MATRIX_V:將點從世界空間下,轉換到觀察空間下
? ? ? ? UNITY_MATRIX_P:將點從觀察空間下,轉換到裁剪空間下
? ? ? ? UNITY_MATRIX_MV:將點從模型空間下,轉換到觀察空間下
? ? ? ? UNITY_MATRIX_VP:將點從世界空間下,轉換到裁剪空間下
????????
? ? ? ? _Object2World:將點從模型到世界空間轉換(互為逆矩陣)
? ? ? ? _World2Object:將點從世界空間到模型轉換(互為逆矩陣)
????????????????????????
????????????????????????
???????????該系列專欄為網課課程筆記,僅用于學習參考。??????????????????