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