D3D矩阵存储是行主序(row-major order)/行优先
OpenGL矩阵存储是列主序(column-major order)/列优先:
线性代数意义的同一个矩阵,在d3d 和 ogl 中却有不同的存储顺序
线代:a11,a12,a13,a14 |D3D : a11,a12,a13,a14 | OpenGL: a11,a21,a31,a41
a21,a22,a23,a24 | a21,a22,a23,a24 | a12,a22,a32,a42
a31,a32,a33,a34 | a31,a32,a33,a34 | a13,a23,a33,a43
a41,a42,a43,a44 | a41,a42,a43,a44 | a14,a24,a34,a44
D3D中顶点和矩阵的相乘方式为:
x' = x(x1,x2,x3,1) * A[4*4]
如果在对局部坐标系进行多种变换,我们需要用到下面的函数:
D3DXMATRIX *WINAPI D3DXMatrixMultiply(
D3DXMATRIX *pOut,
CONST D3DXMATRIX *pM1,
CONST D3DXMATRIX *pM2
);
公式(Out = M1 * M2),其实在C++里,完全可以像公式那里操作,不用这个函数。
注意:这里主要是说明,顶点先进行M1变换,然后才进行M2变换
关于OpenGL更详细的内容可以参加:
http://blog.csdn.net/ryfdizuo/article/details/2325279
OpenGL矩阵存储是列主序(column-major order)/列优先:
线性代数意义的同一个矩阵,在d3d 和 ogl 中却有不同的存储顺序
线代:a11,a12,a13,a14 |D3D : a11,a12,a13,a14 | OpenGL: a11,a21,a31,a41
a21,a22,a23,a24 | a21,a22,a23,a24 | a12,a22,a32,a42
a31,a32,a33,a34 | a31,a32,a33,a34 | a13,a23,a33,a43
a41,a42,a43,a44 | a41,a42,a43,a44 | a14,a24,a34,a44
D3D中顶点和矩阵的相乘方式为:
x' = x(x1,x2,x3,1) * A[4*4]
如果在对局部坐标系进行多种变换,我们需要用到下面的函数:
D3DXMATRIX *WINAPI D3DXMatrixMultiply(
D3DXMATRIX *pOut,
CONST D3DXMATRIX *pM1,
CONST D3DXMATRIX *pM2
);
公式(Out = M1 * M2),其实在C++里,完全可以像公式那里操作,不用这个函数。
注意:这里主要是说明,顶点先进行M1变换,然后才进行M2变换
关于OpenGL更详细的内容可以参加:
http://blog.csdn.net/ryfdizuo/article/details/2325279