DirectX函数学习:矩阵函数

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

         /*他定义的面是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():对矩阵进行转置;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值