Directx11学习笔记 基本的数学知识----矩阵篇

Posted zhangbaochong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Directx11学习笔记 基本的数学知识----矩阵篇相关的知识,希望对你有一定的参考价值。

参考dx11龙书 Chapter2 matrix algebra(矩阵代数)

 

 关于矩阵的一些基本概念定理(例如矩阵加减乘法,逆矩阵,伴随矩阵,转置矩阵等)可以参考维基百科

https://zh.wikipedia.org/wiki/

 

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 #include <windows.h>
 2 #include <xnamath.h>
 3 #include <iostream>
 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.0f
38         );
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 }

技术分享

 

以上是关于Directx11学习笔记 基本的数学知识----矩阵篇的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记30——DirectX框架

DirectX11 学习笔记1 - 第一个程序

Directx11学习笔记 将HelloWin封装成类

3D Game Programming withDX11 学习笔记 数学知识总结

Directx11学习笔记 封装一个简单的Dx11DemoBase

DirectX 11游戏编程学习笔记之1: 开场白