参考dx11龙书 Chapter2 matrix algebra(矩阵代数)
关于矩阵的一些基本概念定理(例如矩阵加减乘法,逆矩阵,伴随矩阵,转置矩阵等)可以参考维基百科
XNA MATRICES
Matrix Types
在xna math中代表一个4*4的矩阵,我们使用XMMATRIX
当在类中存储数据时使用XMFLOAT4X4
用XMMatrixSet创建,原型为
XMMATRIX XMMatrixSet(FLOAT m00,FLOAT m01,FLOAT m02,FLOAT m03,
FLOAT m10,FLOAT m11,FLOAT m12,FLOAT m13,
FLOAT m20,FLOAT m21,FLOAT m22,FLOAT m23,
FLOAT m30,FLOAT m31,FLOAT m32,FLOAT m33,
);
下面是一些Matrix Functions
XMMATRIX XMMatrixIdentity();//单位矩阵
BOOL XMMatrixIsIdentity(CXMMATRIX M);//判断是否是单位矩阵
XMMATRIX XMMatrixMultiply(CXMMATRIX A,CXMMATRIX B);//矩阵相乘
XMMATRIX XMMatrixTranspose(CXMMATRIX M);//转置矩阵
XMVECTOR XMMatrixDeterminiant(CXMMATRIX M);//矩阵的行列式
XMMATRIX XMMatrixInverse(XMVECTOR *pDeteminiant,CXMMATRIX M);//逆矩阵
下面是dx11龙书给出的测试代码:
1 #include2 #include 3 #include 4 using namespace std; 5 6 ostream& operator<<(ostream &os, FXMVECTOR v) 7 { 8 XMFLOAT4 dest; 9 XMStoreFloat4(&dest, v);10 os << "(" << dest.x << "," << dest.y << "," << dest.z << ")";11 return os;12 }13 14 ostream& operator<<(ostream &os, CXMMATRIX m)15 {16 for (int i = 0; i < 4; ++i)17 {18 for (int j = 0; j < 4; ++j)19 {20 os << m(i, j) << "\t";21 }22 os << endl;23 }24 return os;25 }26 27 int main()28 {29 if (!XMVerifyCPUSupport())30 {31 cout << "xna math not supported" << endl;32 return 0;33 }34 XMMATRIX A(1.0f,0.0f,0.0f,0.0f,35 0.0f,2.0f,0.0f,0.0f,36 0.0f,0.0f,4.0f,0.0f,37 1.0f,2.0f,3.0f,1.0f38 );39 XMMATRIX B = XMMatrixIdentity();40 XMMATRIX C = A * B;41 XMMATRIX D = XMMatrixTranspose(A);42 XMVECTOR det = XMMatrixDeterminant(A);43 XMMATRIX E = XMMatrixInverse(&det,A);44 XMMATRIX F = A * E;45 46 cout << "A = " << endl << A << endl;47 cout << "B = " << endl << B << endl;48 cout << "C = A*B = " << endl << C << endl;49 cout << "D = transpose(A) = " << endl << D << endl;50 cout << "det = determinant(A) = " << det << endl << endl;51 cout << "E = inverse(A) = " << endl << E << endl;52 cout << "F = A*E = " << endl << F << endl;53 54 return 0;55 }