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);