DirectX學習:D3DX矩陣函數

來源:互聯網
上載者:User
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():對矩陣進行轉置;

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.