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.

      );

       

         

         

  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/wangke1020/p/3613507.html
Copyright © 2011-2022 走看看