OpenGL 採用如下的的矩陣運算,把它的矩陣稱作 colum matrices
m11 m12 m13 m14 x m21 m22 m23 m24 y m31 m32 m33 m34 z m41 m42 m43 m44 1
而 D3D 採用如下的的矩陣運算,把它的矩陣稱作 row matrices
m11 m12 m13 m14 m21 m22 m23 m24 x y z 1 m31 m32 m33 m34 m41 m42 m43 m44
但那是一個錯誤,那只能說是 "數學" 上的格式,實際上在程式記億體上的儲存方式如下...
OpenGL 採用如下的的矩陣儲存,它稱作 colum major matrices
float M[16] ={m11, m21, m31, m41, m12, m22, m32, m42, m13, m23, m33, m43, m14, m24, m34, m44};
D3D 採用如下的的矩陣儲存,它稱作 row major matrices
float M[16] ={m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44};
請睜大眼睛看清楚,這麼一搞 OpenGL 和 D3D 的 Matrix 不就是一樣的東西,那些 colum major 和 row major 根本就是瞎扯蛋,衝其量只能算是記憶體的陣列對 "數學" 上矩陣的不同排列方式,是如何的選取佈局。
所以你也可以說 OpenGL 是 row major matrices :),但正確的說法是不管是 OpenGL 或 D3D 都不存在 major matrix 的問題,那是 陣列 對 數學矩陣 的選取問題。
資料來源 http://www.mindcontrol.org/~hplus/graphics/matrix-layout.html
大大翻譯的沒錯!
回覆刪除不過在表示 scale , rotation and translation 矩陣的時候 就會適用 到 major matrices 這個美麗的錯誤 也造成相吻合的情況 ~ 囧
寫程式碼的時候 意外相符 .... 事實上歸根究柢就是 row matrix 跟 column matrix 所決定的..