← SEARCHABLE ARCHIVE
Mathematics · 2026-07-15

混合矩陣約定時出現的問題

行向量、列向量、行主和座標系

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

有時矩陣碼移動了,但物件卻向相反方向旋轉,或移動變得奇怪。 當行向量、列向量、儲存順序和座標系約定混合時,通常會發生這種情況。

行向量和列向量

行向量約定
v' = vM

列向量約定
v' = Mv

即使是相同的變換,矩陣形狀和組合順序也會根據向量在哪一側相乘而有所不同。

行優先與乘法規則不同。

行優先和列優先是指行或列在記憶體中是否連續儲存。 使用行向量和使用行優先儲存並不意味著同一件事。

遊行
[ a b ]
[ c d ]

行主記憶體:a b c d
列主記憶體:a c b d

轉置矩陣

轉置交換行和列。

[ a b c ]T   [ a d ]
[ d e f ]  = [ b e ]
              [ c f ]

如果CPU庫和Shader的預期佈局不同,上傳前可能會調換位置。 但如果在不知道原因的情況下無條件插入Transpose,與其他程式碼結合時又會反過來。

也要檢查座標系

左手和右手座標系影響 Z 軸方向、旋轉方向和投影矩陣。 DirectX 函數名稱LH, RH代表了這種差異。

當遇到矩陣錯誤時,最好先寫下以下內容,而不是只看數字。

向量是行還是列?
乘法往哪個方向進行?
記憶體存儲是行優先嗎?
座標係是LH還是RH?
在著色器中轉置?

每條規則並不難。 問題是在沒有解釋的情況下混合來自不同協議的程式碼。