【阅读笔记之二】《DIRECTX.9.0.3D游戏开发编程基础》:基础数学知识

来源:互联网 发布:杨洋星兵报到知乎 编辑:程序博客网 时间:2024/05/14 18:42

基础知识之数学

 

         这一部分主要提供游戏开发所需要的数学知识的简要介绍。这是本书的预备知识。

         这里的数学知识主要讨论向量(Vector)、矩阵(Matrix)、变换(transformation)等,同时包括平面(plane)及射线(ray)。

         向量(vector):

          在D3DX库中,用类D3DXVECTOR3表示3D空间中的向量。其中D3DXVECTOR3成员变量继承自D3DVECTOR其定义如下。

     typedef struct D3DVECTOR{            float x,y,z;     }D3DVECTOR;

          1. 两个向量相等,可以直接用已经重载了运算符“==”和“!=”表示。

          2. 向量大小,用D3DVec3Length函数获取其模的大小。

          3. 向量规范化,我们使用以下函数。函数返回变换结果的指针,所以该函数可以作为另一个函数的参数来使用。在大部分情况下,D3DX数学函数返回的都是指针结果的指针。

       D3DXVECTOR3  *D3DXVec3Normalize(           D3DXVECTOR3        *pOut,           CONST D3DXVECTOR3  *pV       );

          4. 向量的加法,用被重载了的“+”运算符实现。向量减法同理。

          5. 向量数乘,用重载运算符“*”。

          6. 向量点积(dot product),用函数D3DXVec3Dot实现,返回FLOAT类型。同理,向量叉积(cross product),用函数D3DXVect3Cross函数实现,返回运算结果(D3DXVECTOR3类型)指针。

 

          矩阵(matrix):

          关于矩阵的纯数学知识,这里不详细列出。在编写DirectX3D应用程序时,我们通常只使用4*4矩阵和1*4的行向量。4*4矩阵一般用类D3DXMATRIX表示,该类继承自D3DMATRIX结构体。

          D3DXMATRIX类中有很多有用的运算符。最重要的有矩阵相乘和括号运算(访问矩阵中的元素,索引从0开始)。

          D3DX库中针对D3DXMATRIX类型矩阵也定义了很多函数。包括:

          D3DXMATRIX  *D3DXMatrixIndentity(...                 //取单位矩阵

          D3DXMATRIX  *D3DXMatrixTranspose(...               //取转置矩阵

          D3DXMAREIX  *D3DXMatrixInverse(...                    //取逆矩阵,若不可逆,返回NULL

 

          变换(transformation):

         在程序中我们之所以选择4*4矩阵而不是更接近现实生活的3*3矩阵,但是4*4矩阵更有能力表征我们所需要的所有变换,其中包括平移(translation)、透视投影(prospective projection)和反射(reflection)。为了防止向量做毫无意义的平移,我们将向量的最后一个参数w设为0,将w设为1是为了保证点的平移交换能正确进行。

         矩阵变换的相关函数:

         D3DXMATRIX   *D3DXMatrixTranslation(...             //矩阵平移

         D3DXMATRIX   *D3DXMatrixRotationX(...               //创建绕X轴旋转的矩阵

         D3DXMATRIX   *D3DXMatrixScaling(...                   //比例变换

         向量变换的相关函数:

         D3DXVECTOR3   *D3DXVec3TransformCoord(...      //...

 

        小结:

        1. 向量通常对具有大小和方向的物理量进行建模。

        2. 我们可以用4*4矩阵表示各种变换,而用1*4的齐次向量来描述点和向量。通过矩阵和矩阵的乘法将几种变换整合成一个变换矩阵。

        3. 我们用4D齐次向量来同时表示点和向量。当表示向量时,令w分量为0,当表示点时,令w为1。

 

                                                                                                                  ——Josh  2012年10月13日

       

      

 

 




原创粉丝点击