zoukankan      html  css  js  c++  java
  • DirectX12 3D 游戏开发与实战第二章内容

    矩阵代数

    学习目标

    1. 理解矩阵及其相关运算的定义
    2. 探究为何能把向量和矩阵的乘法视为一种线性组合
    3. 学习单位矩阵、转置矩阵、行列式以及矩阵的逆等概念
    4. 逐步熟悉DirectXMath库中提供的关于矩阵计算的类与函数的子集

    2.1矩阵的定义

    一个规模为m x n的矩阵,是由m行n列实数构成的矩阵阵列,行数和列数的乘积表示了矩阵的维度,矩阵中的数字则称为元素或元。理解矩阵相等、加法运算,标量乘法和减法运算。

    2.2矩阵乘法

    如果A是一个m x n矩阵,B是一个n x p矩阵,那么AB的乘积是一个规模为m x p的矩阵C,矩阵C中第i行、第j列的元素,有矩阵A的第i个行向量与矩阵B的第j个列向量的点积求得。要注意的是,矩阵A的行向量的维数(可认为是分量的个数)必须和矩阵B的列向量的维数相等才可以使矩阵乘积AB有意义。而且矩阵乘积一般不满足交换律

    2.2.2向量和矩阵的乘法

    向量与矩阵的乘积uA相当于:向量u给定的标量系数(x,y,z)与矩阵A中各行向量的线性组合。这个结论有一个一般性,对于一个1 x n行向量u和一个n x m矩阵A的乘积为:u1A1 + u2A2 + …… unAn

    2.2.3结合律

    矩阵乘法对矩阵加法的分配律:A(B + C) = AB + AC和(A + B)C = AC + BC。

    矩阵乘法结合律:(AB)C = A(BC)

    2.3转置矩阵

    转置矩阵指的是将原矩阵的行与列进行互换所得到的新矩阵,转置矩阵具有一些性质,这里不列举

    2.4单位矩阵

    单位矩阵I是一种主对角线的元素均为1,其他元素都为0的方阵。单位矩阵是矩阵的乘法单位元,即任何矩阵和单位矩阵相乘,得到的原矩阵,如果M是一个方阵M,则MI = IM,满足乘法交换律

    2.5矩阵的行列式

    行列式是一种特殊的函数,它以一个方阵作为输入,并输出一个实数,方阵A的行列式通常表示为det A。行列式推导出求逆矩阵的公示,此外,行列式也可以用来证明:方阵A是可逆的,当且仅当det A 不为0。

    2.5.1余子阵

    指定一个n x n的矩阵,余子阵Aij(A上有一横线)即从A中取出第i行和第j列的(n - 1) x (n - 2)矩阵

    2.5.2行列式的定义

    2.6伴随矩阵

    2.7逆矩阵

    2.8用DirectXMath库处理矩阵

    为了对点和向量进行变换,我们要借助1 x 4行向量以及4 x 4矩阵

    2.8.1矩阵类型

    DirectXMath库用定义在DirectXMath.h头文件中的XMMATRIX类来表示4 x 4矩阵,XMMATRIX由4个XMVECTOR实例构成,借此来使用SIMD技术。XMMATRIX类为矩阵运算提供了多种重载运算符。除了各种构造方法之外,我们还可以使用XMMatrixSet函数来创建XMMATRIX实例。

    和XMVECTOR一样,我们建议用XMFLOAT4X4来存储类中的矩阵类型数据成员,而不是直接使用XMMATRIX.

    我们可以用加载方法和存储方法来实现XMMATRIX和XMFLOAT4X4类型之间的相互转换

    加载方法:

    XMMATRIX XM_CALLCONV XMLoadFloat4x4(const XMFLOAT4X4* pSource)
    

    存储方法:

    void XM_CALLCONV  XMStoreFloat4x4(XMFloat4x4 * pDestination,FXMMATRIX M)
    

    2.8.2矩阵函数

    DirectXMath库包含了一些和矩阵相关的函数

    //返回单位矩阵
    XMMATRIX XM_CALLCONV XMMatrixIdentity();
    //如果M是单位矩阵则返回true
    bool XM_CALLCONV XMMatrixIsIdentity(FXMMATRXI M);
    //返回矩阵乘积AB
    XMMATRIX XM_CALLCONV XMMatrixMultiply(FXMMATRIX A,CXMMATRIX B);
    //返回矩阵M的转置
    XMMATRIX XM_CALLCONVE XMMatrixTranspose(FXMMATRIX M);
    //返回(det M,det M,det M,det M,)
    XMVECTOR XM_CALLCONV XMMatrixDeteminant(FXMMATRIX M);
    //返回矩阵M的逆矩阵
    XMMATRIX XM_CALLCONV XMMatrixInverse(XMVECTOR* pDeteminant,FXMMATRIX M);
    

    在声明具有XMMATRIX参数的函数时,除了要注意一个XMMATRIX类型相当于4个XMVECTOR类型之外,还要注意,第一个参数应该为FXMMATRIX类型,其余都应该为CXMMATRIX类型。不过有一个特例,在构造函数中的参数应该都使用CXMMATRIX类型,而且对于构造函数,也不能使用XM_CALLCONV约定注解

    2.8.3DirectXMath矩阵实例程序

    主要是一些XMMATRIX类的使用范例,如果想要看示例代码可以自行百度,以后可能会更新。

  • 相关阅读:
    OpenID Connect 验证
    升级到 .NET Core 3.1
    深入 .NET Core 基础
    依赖注入在 dotnet core 中实现与使用:3 使用 Lazy<T> 延迟实例化
    依赖注入在 dotnet core 中实现与使用:2 使用 Extensions DependencyInjection
    依赖注入在 dotnet core 中实现与使用:1 基本概念
    ng-bootstrap 组件集中 tabset 组件的实现分析
    一笔百亿美元军方订单,引发了美国科技公司大混战
    4种事务的隔离级别,InnoDB怎样巧妙实现?
    Google I/O 官方应用中的动效设计
  • 原文地址:https://www.cnblogs.com/yaya12138/p/11454889.html
Copyright © 2011-2022 走看看