程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> D3DX矩陣函數使用教程

D3DX矩陣函數使用教程

編輯:關於C#
 

1:D3DXMatrixAffineTransformation():創建一個仿射變換變換矩陣。NULL的參數就會當作是單位矩陣。

定義

D3DXMATRIX *WINAPI D3DXMatrixAffineTransformation( D3DXMATRIX *pOut,

FLOAT Scaling,

const D3DXVECTOR3 *pRotationCenter,

const D3DXQUATERNION *pRotation,

const D3DXVECTOR3 *pTranslation

);

參數

pOut [in, out] 指向D3DXMATRIX結構返回結果的矩陣。

Scaling [in] 縮放系數。

pRotationCenter [in] 指向D3DXVECTOR3結構指針,旋轉中心向量。如果設置為NULL,就用一個單位矩陣代替Mrc 。

pRotation [in] 指向D3DXQUATERNION結構旋轉矩陣。如果參數為NULL,就用單位矩陣Mr 代替。

pTranslation [in] 指向D3DXVECTOR3 結構變換向量。如果為NULL,就用單位矩陣Mt 。

返回值:

指向 D3DXMATRIX 結構的仿射變換矩陣。

說明:

本函數是用下面的公式來計算一個仿射變換矩陣:

Mout = Ms * (Mrc)-1 * Mr * Mrc * Mt

其中:

Mout = 輸出矩陣 (pOut)

Ms = 縮放矩陣 (Scaling)

Mrc = 旋轉矩陣中心 (pRotationCenter)

Mr = 旋轉矩陣 (pRotation)

Mt = 平移矩陣 (pTranslation)

返回值跟pOut 是一樣的,這樣可以讓D3DXMatrixAffineTransformation 成為其它函數參數使用。2D的仿射變換矩陣用D3DXMatrixAffineTransformation2D

2:D3DXMatrixAffineTransformation2D():在X-Y平面創建一個仿射變換變換矩陣。NULL的參數就會當作是單位矩陣

3:D3DXMatrixDecompose():分解一個3D變換矩陣為縮放系數,旋轉分量和平移向量。

4:D3DXMatrixDeterminant():計算矩陣行列式值。

5:D3DXMatrixIdentity():創建一個單位化矩陣

6:D3DXMatrixInverse():計算矩陣的逆矩陣。如果逆陣不存在,就返回NULL;

7:D3DXMatrixIsIdentity():判斷一個矩陣是否是單位陣;

8:D3DXMatrixLookAtLH():Builds a left-handed, look-at matrix.

D3DXMatrixLookAtRH():

9:D3DXMatrixMultiply():矩陣的乘積;

10:D3DXMatrixMultiplyTranspose():計算兩個矩陣乘積之後再轉置,此函數常用在vertex and pixel shaders中;

11:D3DXMatrixOrthoLH()、D3DXMatrixOrthoRH():

Builds a left-handed orthographic projection matrix.

12:D3DXMatrixOrthoOffCenterLH(),D3DXMatrixOrthoOffCenterRH():

13:D3DXMatrixPerspectiveFovLH(),D3DXMatrixPerspectiveFovRH():

14:D3DXMatrixPerspectiveLH(),D3DXMatrixPerspectiveRH():

15:D3DXMatrixReflect()

從平面方程創建一個平面反射矩陣。

說明:

本函數先規格化平方程的系數,然後再創建平面方程的反射矩陣。

函數返回值跟pOut 參數返回值是一樣的。這樣可以讓函數D3DXMatrixReflect作為其它函數的參數使用。

本函數用下面的公式來計算平面反射矩陣:

P = normalize(Plane);

-2 * P.a * P.a + 1 -2 * P.b * P.a -2 * P.c * P.a 0

-2 * P.a * P.b -2 * P.b * P.b + 1 -2 * P.c * P.b 0

-2 * P.a * P.c -2 * P.b * P.c -2 * P.c * P.c + 1 0

-2 * P.a * P.d -2 * P.b * P.d -2 * P.c * P.d 1

如果做一個物體沿一個平面做鏡像,可以用此函數;

16:D3DXMatrixRotationAxis():創建一個繞一個軸旋轉的矩陣;

17:D3DXMatrixRotatioxnX;D3DXMatrixRotationY;D3DXMatrixRotationZ;

18:D3DXMatrixRotationQuaternion():Builds a rotation matrix from a quaternion

19:D3DXMatrixRotationYawPitchRoll

Builds a matrix with a specified yaw, pitch, and roll.

D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(

D3DXMATRIX * pOut,

FLOAT Yaw,

FLOAT Pitch,

FLOAT Roll

);

Parameters

pOut

[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.

Yaw

[in] Yaw around the y-axis, in radians.

Pitch

[in] Pitch around the x-axis, in radians.

Roll

[in] Roll around the z-axis, in radians.

Return Values

Pointer to a D3DXMATRIX structure with the specified yaw, pitch, and roll.

注意轉換的次序是先roll,再pitch,然後是yaw;即,先繞Z軸轉,再繞X軸旋轉,再繞X軸旋轉;

20:D3DXMatrixScaling():創建一個縮放矩陣;

21:D3DXMatrixShadow():

創建一個平面的陰影矩陣。

定義:

D3DXMATRIX *WINAPI D3DXMatrixShadow( D3DXMATRIX *pOut,

CONST D3DXVECTOR4 *pLight,

CONST D3DXPLANE *pPlane

);

參數:

pOut

[in, out] 指向D3DXMATRIX 結構的操作結果矩陣。

pLight

[in] 指向D3DXVECTOR4 結構的光線位置向量。

pPlane

[in] 指向D3DXPLANE 結構的平面方程。

返回值:

指向D3DXMATRIX 結構的矩陣,它是用來把幾何在平面陰影變換矩陣。

說明:

如果從光線照射幾何物體有陰影,就可以用函數D3DXMatrixShadow 計算陰影變換矩陣。

函數返回值跟pOut 參數返回值是一樣的。這樣可以讓函數D3DXMatrixShadow作為其它函數的參數使用。

用下面的方法計算這個矩陣:

P = normalize(Plane);

L = Light;

d = dot(P, L)

P.a * L.x + d P.a * L.y P.a * L.z P.a * L.w

P.b * L.x P.b * L.y + d P.b * L.z P.b * L.w

P.c * L.x P.c * L.y P.c * L.z + d P.c * L.w

P.d * L.x P.d * L.y P.d * L.z P.d * L.w + d

如果光線的W分量是0,表示從原點發出的方向光。如果W分量是1,表示它是一個點光源。

在一個產生物體平面陰影的Demo中看到如下代碼:

// position shadow

D3DXVECTOR4 lightDirection(0.707f, -0.707f, 0.707f, 0.0f);  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved