[DirectX 9.0 笔记] 基础API

三维空间向量

在D3DX库中,用D3DVECTOR3类表示三维空间的向量。向量支持+、-、*、/、==、!= 等各种运算。

计算向量大小(向量的模)

我们利用D3DX库下面的函数便能计算向量的大小。
FLOAT D3DXVec3Length(CONST D3DXVECTOR3* Pv);

  • 标准化向量

    标准化向量就是让向量的大小等于1, 即被叫做单位向量。

    我们利用D3DX的库下面的函数能标砖化向量。

    D3DXVECTOR3 *D3DXVec3Normalize(

    D3DXVECTOR3* pOut, // Result.

    CONST D3DXVECTOR3* pV // The vecotr to normallize.

    );

  • 点积

    数学上定义点积两个量向量的乘积

       

    我们用下面的D3DX函数计算两个向量的点积:

    FLAOT D3DXVec3Dot(

    CONST D3DVECTOR3* pV1,

    CONST D3DVECTOR3* pV2

    );

  • 叉积

       

    我们用下面的D3DX函数计算两个向量的叉积:

    D3DXVERTOR* D3dXVec3Cross(

    D3DXVECTOR* pOut,

    CONST D3DXVECTOR3* pV1,

    CONST D3DXVECTOR3* pV2

    );

    D3DX矩阵

    在D3DX中表示4 X 4的矩阵,我们用D3DXMATRIX

    D3DX库也提供下列函数:将D3DXMATRIX转化为单位矩阵,转置D3DXMATIRX矩阵以及求逆矩阵。

       

    D3DXMATRIX* D3DXMatrixIdentity(

    D3DXMATIRX *pOut // 将矩阵转换为单位矩阵

    );

       

    D3DXMATRIX* D3DXMatrixTranspose(

    D3DXMATRIX* pOut, // 输出的转置矩阵

    CONST D3DXMATRIX *pM // 原矩阵

    );

       

    D3DXMATRIX* D3DXMatrixInverse(

    D3DXMATRIX* pOut, // 输出的逆矩阵

    FLOAT* pDeterminant, //除非是必须的,一般设为0

    CONST D3DXMATRIX *Pm // 原矩阵

    );

    假如我们将不能求逆的矩阵用求逆函数,那么函数将会返回null。我们忽视第二个参数,并且总是把他设置为0.

       

    基本变换:

    当用DirectX3D编程时,我们用4X4矩阵来进行矩阵变换,因为4X4矩阵能够更精确地描述矩阵变换。但是点和向量是3D的,想要用4X4的矩阵变换,就必须扩展为1X4的行矩阵。

    第四个成员用来区别点和向量。

    点是可以平移的,第四个数设为1。而对于向量,向量的位置与位置无关,为了防止对向量进行平移,把第四个数设为0.

    点:[p1, p2,p3, 1]

    向量:[v1, v2, v3, 0]

  • 矩阵平移:

    将矩阵平移的D3DX函数是:

    D3DXMATRIX* D3DXMatrixTranslation(

    D3DXMATRIX* pOut, // 返回评议后的矩阵

    FLOAT x, // x轴移动的距离

    FLOAT y,

    FLOAT z,

    );

  • 矩阵旋转

    将矩阵饶着x轴旋转的D3DX函数是:

    D3DXMATRIX *D3DXMatrixRotationX

    (

    D3DXMATRIX* pOut, // 返回旋转后的矩阵

    FLOAT Angle // Angle是旋转的弧度

    );

       

    将矩阵饶着y轴旋转的D3DX函数是:

    D3DXMATRIX *D3DXMatrixRotationY

    (

    D3DXMATRIX* pOut, // 返回旋转后的矩阵

    FLOAT Angle // Angle是旋转的弧度

    );

       

       

    将矩阵饶着z轴旋转的D3DX函数是:

    D3DXMATRIX *D3DXMatrixRotation

    Z

    (

    D3DXMATRIX* pOut, // 返回旋转后的矩阵

    FLOAT Angle // Angle是旋转的弧度

    );

  • 矩阵缩放

    D3DXMATRIX *D3DXMatrixScaling(

    D3DXMATRIX* pOut, // 返回缩放后的矩阵

    FLOAT sx, // x缩放的比例

    FLOAT sy,

    FLOAT sz

    );

  • 一些向量变换函数

    D3DXVec3TransformCoord函数变换点同时设置向量第四个成员为1.

    D3DXVec3TransformNormal函数变换向量并且设置第四个成员变量为0

    D3DX 库也提供D3DXVec3TransformCoordArrayD3DXVec3TransformNormalArray 来分别变

    换一个点数组和向量数组

       

    D3DX平面

       

    一个平面能通过一个向量n 和平面上的一个点p0来描述。这个向量n 垂直于平面,它被称为此平

    面的法向量

    假如p、p0 都是平面上一点,那么向量(p - p0)垂直于平面的法向量。

       

    当我们通过法向量n 和平面上一个已知点来描述一个平面时,上述等式又被写成这样:

    这时d = –n·p0。

       

       

    在代码中描述一个平板:仅仅需要一个法向量和常数就可以了。因为我们就使用一个4d向量来实现它。

    D3DX库中用D3DXPLANE来定义一个平面。

  • 点和平面的空间关系

    FLOAT D3DXPlaneDotCoord(

    CONST DEDXPLANE *pP,//平面

    CONST D3DXVECTOR3 *Pv // 点

    );

    返回值为0时表示点在平面上,大于0表示点在平面正半空间。

  • 创建平面

    我们能通过两种方法创建平面。

    第一种方法,直接用指定法线和点创建平面。假设法线n和在平面上的已知点p0 ,我们就能求出d:

    D3DX库提供如下函数来完成创建平面的任务:

    D3DXPLANE *D3DXPlaneFromPointNormal

    (

    D3DXPLANE* pOut, // Result.

    CONST D3DXVECTOR3* pPoint, // Point on the plane.

    CONST D3DXVECTOR3* pNormal // The normal of the plane.

    );

    第二种方法,我们能通过在平面上的3个点创立一个平面。

    D3DX库提供如下函数来完成通过同一平面上的3个点确定一个平面:

    D3DXPLANE *D3DXPlaneFromPoints

    (

    D3DXPLANE* pOut, // Result.

    CONST D3DXVECTOR3* pV1, // Point 1 on the plane.

    CONST D3DXVECTOR3* pV2, // Point 2 on the plane.

    CONST D3DXVECTOR3* pV3 // Point 3 on the plane.

    );

  • 标准化平面

    我们能用下面的D3DX函数来标准化一个平面:

    D3DXPLANE *D3DXPlaneNormalize

    (

    D3DXPLANE *pOut, // Resulting normalized plane.

    CONST D3DXPLANE *pP // Input plane.

    );

       

  • 变换平面

    我们能用下面的D3DX函数来完成操作:

    D3DXPLANE *D3DXPlaneTransform

    (

    D3DXPLANE *pOut, // Result

    CONST D3DXPLANE *pP, // Input plane.

    CONST D3DXMATRIX *pM // Transformation matrix.

    );

     

       

       

原文地址:https://www.cnblogs.com/wangke1020/p/3613507.html