D3D數學基礎(初級篇)

Direct3D遊戲開發學習筆記3——D3D數學基礎(初級篇) (轉)

一、數學工具在虛擬3D世界中的作用、D3D與D3DX的關係:

1、數學的作用:數學是搭建虛擬3D世界的基礎,角色控制、動畫、關照計算、陰影計算、特效顯示等等,數學在裏面都起着支柱作用;

2、D3D與D3DX的關係:D3D是基本庫的函數,任何跟基本渲染包括和硬件打交道的底層操作都在這裏,它是必需。D3DX是擴展庫函數,是做輔助開發用的,封裝了很多方便使用的功能,就算沒有它也可以完成所有的渲染,只是很多東西得自己動手寫而已;

 

二、向量的定義、計算:

1、定義:既包括大小由包括方向的量,由兩個頂點來描述(注意在D3D中所說的向量一般指自由向量,即起點爲座標原點的向量),在D3D中對應D3DVECTOR結構,在D3DX中對應D3DXVECTOR3,D3DXVECTOR3是對D3DVECTOR的繼承,它保留D3DVECTOR的數據成員的同時還重載了向量運算可能出現的各種運算符(如==、!=、+、-、*、/);

2、計算:

1)判斷向量相等  D3DX中對應==運算符;

2)向量的模/長度  D3DX中對應FLOAT D3DXVec3Length(CONST D3DXVECTOR3 *pV)接口;

3)向量加/減法   D3DX中對應+/-運算符;

4)向量單位化    即方向不變長度變爲1   D3DX中對應D3DXVECTOR3 *WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV) 接口;

5)向量放縮      D3DX中對應*運算符;

6)向量點乘      結果用於判斷兩向量間的夾角  D3DX中對應FLOAT D3DXVec3Dot(CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2) 接口;

7)向量叉積      結果爲垂直於參與計算的的兩個向量,方向遵守右手法則(右手四指環繞相乘的兩向量 大拇指指向的方向)   D3DX中對應D3DXVECTOR3 *D3DXVec3Cross(D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2)接口;

 

三、矩陣、物體世界矩陣、計算:

1、矩陣:一個按行列排列的數組,在D3D中對應D3DMATRIX結構是一個4*4矩陣,在D3DX中對應D3DXMATRIX,D3DXVECTOR3MATRIX是對D3DMATRIX的繼承,它保留D3DMATRIX的數據成員的同時還重載了向量運算可能出現的各種運算符(如==、!=、+、-、*、/);

2、物體世界矩陣:是對物體Look(面向方向)、Up(頭頂方向)、Right(右手方向)、Position(位置向量)共四個向量進行分行存儲得到的矩陣;

3、計算:

1)加/減/乘    D3DX中對應+/-/*運算符;

2)單位化     D3DX中對應D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pOut

)接口;

3)平移矩陣   D3DX中對應D3DXMATRIX *WINAPI D3DXMatrixTranslation(D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z)接口;

4)旋轉矩陣   D3DX中對應D3DXMATRIX *WINAPI D3DXMatrixRotationX/Y/Z(D3DXMATRIX *pOut, FLOAT Angle)接口;

5)放縮矩陣   D3DX中對應D3DXMATRIX *WINAPI D3DXMatrixScaling(D3DXMATRIX *pOutFLOAT sx, FLOAT sy, FLOAT sz)接口;

注意:在對物體世界矩陣進行變換的順序爲:先放縮後旋轉再平移

       在對視矩陣進行變換的順序爲:先平移後旋轉  無需放縮

 

四、其它常用數學函數和變換接口:

1、創建繞向量旋轉的矩陣的函數:D3DXMATRIX *WINAPI D3DXMatrixRotationAxis( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);

2、用旋轉矩陣旋轉向量的函數:D3DXMATRIX *WINAPI D3DXMatrixRotationAxis( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);

說明:利用以上兩個函數可以控制A向量繞B向量旋轉

3、創建繞向量旋轉的四元數的函數:D3DXQUATERNION *WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);

4、創建繞X、Y、Z軸旋轉的四元數的函數:D3DXQUATERNION *WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll);

5、轉換四元數爲旋轉矩陣的函數:D3DXMATRIX *WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pOut, CONST D3DXQUATERNION *pQ);

發佈了1 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章