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:D3DXMatrixRotationYawPitchRollBuilds a matrix with a specified yaw, pitch, and roll.D3DXMATRIX * D3DXMatrixRotationYawPitchRoll( D3DXMATRIX * pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll);ParameterspOut [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 ValuesPointer 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); /*他定義的面是XZ平面*/ D3DXPLANE groundPlane(0.0f, -1.0f, 0.0f, 0.0f); D3DXMATRIX S; D3DXMatrixShadow( &S, &lightDirection, &groundPlane); D3DXMATRIX T; D3DXMatrixTranslation( &T, TeapotPosition.x, TeapotPosition.y, TeapotPosition.z); D3DXMATRIX W = T * S; Device->SetTransform(D3DTS_WORLD, &W); 22:D3DXMatrixTransformation(),D3DXMatrixTransformation2D()建立一個變換矩陣。如果參數設定為NULL,就當作單位矩陣處理。定義:D3DXMATRIX *WINAPI D3DXMatrixTransformation( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pScalingCenter, CONST D3DXQUATERNION *pScalingRotation, CONST D3DXVECTOR3 *pScaling, CONST D3DXVECTOR3 *pRotationCenter, CONST D3DXQUATERNION *pRotation, CONST D3DXVECTOR3 *pTranslation);參數:pOut [in, out] 指向D3DXMATRIX 結構的操作結果矩陣。pScalingCenter [in] 指向D3DXVECTOR3 結構的縮放中心點向量。如果為NULL,Msc 矩陣就是單位矩陣。 pScalingRotation [in] 指向D3DXQUATERNION 結構的縮放和旋轉的四元組。如果參數為NULL,Msr 矩陣就是單位矩陣。 pScaling [in] 指向D3DXVECTOR3 結構的縮放向量。如果參數為NULL,Ms 矩陣就是單位矩陣。 pRotationCenter [in] 指向D3DXVECTOR3 結構的旋轉中心向量。如果參數為NULL,Mrc 矩陣是單位矩陣。 pRotation [in] 指向D3DXQUATERNION 結構的旋轉的四元組。如果參數為NULL,Mr 矩陣就是單位矩陣。 pTranslation [in] 指向D3DXVECTOR3 結構的平移向量。如果參數是NULL,Mt 矩陣就是單位矩陣。傳回值:指向 D3DXMATRIX 結構的變換矩陣。matrix.說明:本函數用下面的公式計算變換矩陣: Mout = (Msc)-1 * (Msr)-1 * Ms * Msr * Msc * (Mrc)-1 * Mr * Mrc * Mt其中: Mout = 輸出矩陣 (pOut) Msc = 縮放中心矩陣 (pScalingCenter) Msr = 縮放旋轉矩陣 (pScalingRotation) Ms = 縮放矩陣 (pScaling) Mrc = 旋轉中心矩陣 (pRotationCenter) Mr = 旋轉矩陣 (pRotation) Mt = 平移矩陣 (pTranslation)函數傳回值跟pOut 參數傳回值是一樣的。這樣可以讓函數D3DXMatrixTransformation作為其它函數的參數使用。如果是2D的變換矩陣,就要用函數 D3DXMatrixTransformation2D。 23:D3DXMatrixTranslation():Builds a matrix using the specified offsets. 24:D3DXMatrixTranspose():對矩陣進行轉置;