使用矩陣轉換位置、旋轉和縮放
將遊戲物件的變換表示為矩陣
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
遊戲物件的位置、旋轉和大小可以用矩陣表示。 我們先檢查一下基於二維原點的變換。
尺寸換算
[ sx 0 ] [ x ] = [ sx * x ]
[ 0 sy ] [ y ] [ sy * y ]
X 軸是sx,Y軸為sy增加多達 如果兩者之一為負,則基於該軸翻轉。
旋轉變換
[ cosθ -sinθ ] [ x ]
[ sinθ cosθ ] [ y ]
此矩陣將向量繞原點旋轉 θ。 請注意不要將接收 Degree 的函數與接收 Radian 的函數混合在一起。
為什麼運動是3×3?
僅使用 2×2 矩陣無法將原點移到另一個位置。 所以在二維座標中w = 1使用齊次座標並新增 。
[ 1 0 tx ] [ x ] [ x + tx ]
[ 0 1 ty ] [ y ] = [ y + ty ]
[ 0 0 1 ] [ 1 ] [ 1 ]
在3D中,同樣的原因使用4×4矩陣。
訂單變更結果
將物件的大小加倍然後向右移動 10 度與先移動物件然後將整個座標加倍所得到的結果不同。
Scale → Translate
位置移動 10
Translate → Scale
移動量可以加倍
由於每個引擎和數學庫在向量放置在行還是列上方面有所不同,因此必須在文件中檢查程式碼的乘法順序。 採用什麼座標係以及以什麼順序應用比矩陣本身更重要。