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 }

时间: 2024-08-12 00:50:55

Directx11学习笔记【六】 基本的数学知识----矩阵篇的相关文章

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

在图形学中,数学是不可或缺的一部分,所以本书最开始的部分就是数学知识的复习.在图形学中,最常用的是矢量和矩阵,所以我根据前面三个章节的数学知识,总结一下数学知识. 一.矢量 数学中的矢量,拥有方向和长度.其实矢量和点在坐标系中的表示完全一致(笛卡尔坐标系为准),区分矢量和点的关键,我觉得就是做平移.点是不能用平移操作来保证一致的,比如点A(1,2,3)经过平移矢量(1,2,3)后就是B(2,4,6),此时就是一个新的点.但是矢量经过相同平移操作后,还是矢量(1,2,3),这是因为矢量表示的是 v

DirectX11 学习笔记6 - 使用D3DXMATH数学库的一个例子

这个例子是在之前的例子基础上 ,把之前d3dx10math数学库换成了最新的d3dxmath.优点就不说了.先上效果图 全部代码.以及效果文件 文件结构 全部代码: 按照上图的文件顺序 #pragma once #include <D3DX10math.h> #include <xnamath.h> class XCamera { public: XCamera() { m_positionX = 0.0f; m_positionY = 0.0f; m_positionZ = 0.

python学习笔记六之模块下(基础篇)

shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb") >>> s['x'] = ['a','b','c'] >>> s['x'].append('d') >>> s['x'] ['a', 'b', 'c'] 解析:当你在shelve对象中查找元素的时候,这个对象都会根据已经存储的版本进行重新构建,当你将

最大熵学习笔记(一)预备知识

  生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Principle).本文为一则读书笔记,将对最大熵原理以及由此导出的最大熵模型进行介绍,重点给出其中所涉及数学公式的理解和详细推导. 相关链接 最大熵学习笔记(零)目录和引言 最大熵学习笔记(一)预备知识 最大熵学习笔记(二)最大熵原理 最大熵学习笔记(三)最大熵模型 最大熵学习笔记(四)模型求解 最大熵学习笔

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

Linux System Programming 学习笔记(六) 进程调度

1. 进程调度 the process scheduler is the component of a kernel that selects which process to run next. 进程调度器需要使 处理器使用率最大化,并且提供 使多个进程并发执行的虚拟 Deciding which processes run, when, and for how long is the process scheduler's fundamental responsibility. 时间片:th

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

python之raw_input()(学习笔记六)

python之raw_input()(学习笔记六) 我们经常使用raw_input()读取用户的输入,如下例子所示: >>> name = raw_input('please input your name:'),截图如下: 下面简单说下,raw_input()与if搭配使用,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- birth = raw_input('birth:') if birth < 2000: print '0

Directx11学习笔记【二十二】 用高度图实现地形

本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Directx11学习笔记[十三] 实现一个简单地形),只不过原来使用一个固定的函数获得地形高度,这样跟真实的地形差距比较大.接下来让我们学习使用高度图来进行三维地形模拟. 1.高度图 高度图其实就是一组连续的数组,这个数组中的元素与地形网格中的顶点一一对应,且每一个元素都指定了地形网格的某个顶点的高度值.高度