D3DX矩阵函数

原创 2014年04月03日 11:02:57
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():对矩阵进行转置;
版权声明:本文为博主原创文章,未经博主允许不得转载。

D3D11 物体A绕特定物体旋转及ID3DXMatrixStack配置

近期做D3D开发,遇到实际问题:提取面片A中B区域创建新的面片B,面片B以自己底边为轴旋转30度                            抽象问题:物体A绕特定物体旋转 两种思路: 1)...
  • Pollution_free
  • Pollution_free
  • 2017年05月19日 14:39
  • 226

matlab矩阵函数操作

matlab点滴 ScSPM SPP 只有在正真编程用过之后才能熟悉,这里只有简单名字,大概只能记住有哪些功能: eye 单位矩阵 zeros 全零矩阵 ones 全1矩阵 rand 均匀分布随...
  • langb2014
  • langb2014
  • 2015年09月23日 13:35
  • 3809

矩阵运算函数

二、矩阵操作(拷贝、洗牌、局部访问):   src.copyTo(dst) 把src矩阵中的数据拷贝到dst。   src.convertTo(dst, type, scale, shift...
  • yansmile1
  • yansmile1
  • 2015年06月12日 09:25
  • 895

菜鸟学编程之一:C定义、初始化矩阵

在进行科学计算的时候,矩阵是一种
  • ZYTTAE
  • ZYTTAE
  • 2014年10月12日 13:36
  • 1737

有关 Direct3D技术的初步探索-------矩阵变换

有关 Direct3D技术的初步探索-------矩阵变换   几何渲染管线把顶点作为输入,可进行3种变换:世界变换,摄像机变换和投影变换,并将这些变换施展到顶点。 1世界变换:...
  • linuxheik
  • linuxheik
  • 2013年09月05日 15:46
  • 681

MATLAB中矩阵计算函数(初级篇)

1、向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] 列向量:a=[1;2;3;4;5] 2)用“:”生成向量   a=J:K 生成的行向量是a=[J,J+...
  • phoenixtree7
  • phoenixtree7
  • 2014年10月26日 21:25
  • 1495

混淆矩阵可视化接口(子函数)

Pyhon 2.7 IDE Pycharm 5.0.3 numpy 1.11.0目前接口库@MrLevo520–数据转化接口仍在不断更新目的 将混淆矩阵可视化展现出来 准备工作 亲先安装n...
  • MrLevo520
  • MrLevo520
  • 2016年11月02日 10:57
  • 1290

D3DX11 简单的 编译通过和运行

#ifndef _D3DX_BASE_H_ #define _D3DX_BASE_H_ #include #include #include class D3DXBase{ public: ...
  • xiuye2015
  • xiuye2015
  • 2016年11月03日 09:16
  • 563

Hessian矩阵与多元函数极值

海塞矩阵(Hessian Matrix)是一个多元函数的二阶偏导数构成的方阵。它在机器学习和图像处理中,具有重要应用。例如,图像特征检测中的SIFT和SURF算法中就用到了它。此外,很多机器学习算法(...
  • baimafujinji
  • baimafujinji
  • 2016年04月17日 14:13
  • 10605

VC++ 求矩阵的转置和行列式的值(线性代数)

C++和线代无疑是天作之合,线代里的矩阵内容很多都能用C++求解,冥冥之中这两者的联系还会有更深层次的不为人知的秘密。目前利用C++求线代里的东西无疑是行列式的值、矩阵的转置、伴随矩阵、逆矩阵,这里先...
  • Antares_SANTALEN
  • Antares_SANTALEN
  • 2016年09月13日 09:50
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:D3DX矩阵函数
举报原因:
原因补充:

(最多只允许输入30个字)