zoukankan      html  css  js  c++  java
  • [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.

      );

       

         

         

  • 相关阅读:
    base64编码的字符串与图片相互转换
    超酷3D照片展示效果
    table内容保存到Excel中
    项目管理--PMBOK 读书笔记(3)【项目经理的角色 】
    项目管理--PMBOK 读书笔记(2)【项目运行环境】
    项目管理--PMBOK 读书笔记(1)【引论】
    C# ASP.NET递归循环生成嵌套json结构树
    将XML转换为JSON并强制数组
    Yapi Docker 部署
    Spring Cloud Feign+Hystrix自定义异常处理
  • 原文地址:https://www.cnblogs.com/wangke1020/p/3613507.html
Copyright © 2011-2022 走看看