D3D數學基礎(初級篇)

2021-06-06 07:15:23 字數 2556 閱讀 3056

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

D3D基本框架 即D3D標頭檔案分類

了dxut的結構 後,發現微軟程式設計師的編碼風格太深奧了。各種巨集定義 預編譯跳得頭暈,由於對於window api的不精通,導致寫出符合dxut風格的框架以現在的水平來看是不可能的。既然沒有弄通dxut,我也暫時不想套用了,那麼還是先自己用自己的框架來寫把。框架如下 雖然沒學會dxut,但是微軟...

d3d矩陣變換

1.d3d的繪製流水線 區域性座標系 模型空間 世界座標系 觀察座標系 背面消隱 光照 裁剪 投影 視口變化 光柵化 每個3d模型都有自己的空間,空間的中心 原點 就是模型的中心。世界空間就是物體 模型 存在的地方。世界的中心就是原點 0,0,0 注意螢幕中間的那一點不是世界空間的中心點,螢幕中間的...

d3d矩陣總結

d3d中實現物件的基本渲染需要使用shader指令碼,而shader指令碼最低的的需求就是頂點與矩陣,在這裡主要討論矩陣 這個矩陣是3個矩陣運算得來的,分別是世界矩陣 視矩陣和投影矩陣 世界矩陣 世界矩陣就是標識者物體在世界座標系中的位置,預設下設為單位陣即可 視矩陣 視矩陣是攝像機位置和朝向的設定...