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類的使用范例,如果想要看示例代碼可以自行百度,以后可能會更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM