|
2013/5/16 下午 12:20:50
在許久以來的傳說...
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
|
|
|
2013/5/16 下午 01:52:51
http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html
|
|
|
2013/5/16 下午 03:19:55
用一個簡單實例,若有一本書的例子 X 右移 2 個單位,寫成如下,這是 colum matrices 的寫法
1 0 0 2 x
0 1 0 0 y
0 0 1 0 z
0 0 0 1 1
現在要把它用程式去實作成陣例,不管是 OpenGL 或 D3D 都要用 colum major matrices 來實作
float M[16] ={1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 1};
因為 OpenGL 和 D3D 都採用相同的 major matrices 準則,也就是用 colum major matrices 對待 colum matrices,用 row major matrices 對待 row matrices
|
|
|
|
|
|
OpenGL |
 |
|
|
專家等級 |
評價 |
|
|
一代宗師 |
10000 |
|
|
曠世奇才 |
5000 |
|
|
頂尖高手 |
3000 |
|
|
卓越專家 |
1500 |
|
|
優秀好手 |
750 |
|
|
|
|
|
|
|
|
|
Microsoft Internet Explorer
6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/ |
|
|