DirectX 矩阵
?
基礎:
下標:第一個下標為該元素所在行的索引,第二個下標為該元素所在列的索引。如下圖所示
?
行向量和列向量:只有單行的向量稱為行向量,只有單列的稱之為列向量。
相等
維數和元素都相等
數乘(與標量相乘)
每一個元素與標量相乘
加法(矩陣+矩陣=矩陣)
兩個矩陣相應元素想加所得的矩陣,必須維數相等
矩陣乘法(矩陣*矩陣=矩陣)
條件:A的列數必須等于B的行數
定義:A(m*n) B(n*p) 則乘積AB有意義,且等于一個矩陣C(m*p),其中乘積C[i][j] = A的第i個行向量 * B的第j個列向量的點積。
單位矩陣(類似于標量1與矩陣相乘不改變矩陣)
定義:除主對角線上的元素為1外,其它全為0
單位陣可以作為一個乘法單位(multiplicative identity) MI = IM = M
即,用一個單位矩陣與某一個矩陣相乘,不改變該矩陣。而且,某一矩陣與單位矩陣相乘,是矩陣簡潔可交換的特例,單位矩陣對于標量可以認為是矩陣中的”1”
證明:
逆矩陣(矩陣的乘法逆運算)
- 只有方陣才有逆矩陣
- 一個n*n的矩陣M的逆矩陣也是一個n*n的矩陣用表示
- 并非所有方陣都有逆矩陣
- 一個矩陣與其逆陣的乘積為單位陣,當一個矩陣與其逆矩陣相乘時,可交換相乘次序
?
-
矩陣的轉置
-
通過交換矩陣的行和列
D3DX矩陣
編程D3DX程序時,我們通常只使用4*4的矩陣和1*4的行向量。注意,使用這兩種維護的矩陣,意味著以下矩陣乘法是有意義的:
向量-矩陣乘法。若v為1*4的行向量,T為4*4的矩陣,則乘積vT有意義,且其結果為1*4的行向量
矩陣矩陣乘法:若T和R都為4*4的矩陣,則乘積TR和RT有意義,其結果為4*4的矩陣。注意TR和RT不一定相等。
?
?
基本變換
1*4向量在3d坐標系中點表示方法p = (p1,p2,p3,0)?
1*4向量在3d坐標系中向量的表示方法 v = (v1,v2,v3,1) 擴展后的向量稱為齊次向量,因為齊次向量即可以表示點,又可以表示向量
向量處于齊次空間:
?
平移矩陣
要想將向量(x,y,z,1)沿x軸平穩px單位,y軸平移py個單位,z軸平移pz個單位 我們只需要將該向量與以下矩陣相乘
用于創建平移矩陣的D3DX函數為D3DXMatrixTranslation
旋轉矩陣
我們可以用如下3個矩陣分別表示繞x,y,z軸旋轉θ弧度
旋轉矩陣R的逆矩陣與其轉置相等,即
比例變的矩陣
比例變的
如果讓一個向量沿x,y,z軸分別放大qx,qy,qz倍,可令該向量與如下矩陣相乘
Dx中的函數為
幾何變的的組合
矩陣變換的一個最關鍵的優點是,可借助矩陣乘法將幾種變換組合為一個變換矩陣
向量變換的一些函數
D3DXVerc3TransformCoord函數對點進行變換,并假定向量第4個分量為1
D3DXVec3TransformNormal用于向量變換,并假定向量第4個分量為0
總結
以上是生活随笔為你收集整理的DirectX 矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编级UART串口初始化与打印
- 下一篇: java实现的简单程序登录界面