【阅读笔记之二】《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日
- 【阅读笔记之二】《DIRECTX.9.0.3D游戏开发编程基础》:基础数学知识
- 【阅读笔记之三】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D初始化
- 【阅读笔记之四】《DIRECTX.9.0.3D游戏开发编程基础》绘制流水线
- 【阅读笔记之五】《DIRECTX.9.0.3D游戏开发编程基础》Direct3D中的绘制
- 【阅读笔记之六】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的颜色
- 【阅读笔记之七】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的光照
- 【阅读笔记之九】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的融合技术
- 【阅读笔记之十】《DIRECTX.9.0.3D游戏开发编程基础》:Direc3D中的字体
- 【阅读笔记之一】《DIRECTX.9.0.3D游戏开发编程基础》:DirectX概略
- 【阅读笔记之十二】《DIRECTX.9.0.3D游戏开发编程基础》:网格(二)浅话X文件和渐进网格
- 【阅读笔记之八】《DIRECTX.9.0.3D游戏开发编程基础》:Direct3D中的纹理与映射
- 【阅读笔记之十一】《DIRECTX.9.0.3D游戏开发编程基础》:网格(一)闲话ID3DXMesh接口
- 【阅读笔记之十三】《DIRECTX.9.0.3D游戏开发编程基础》 网格(三)加载小汽车的XFile的demo
- 关于阅读《DIRECTX.9.0.3D游戏开发编程基础》的计划
- 《 DirectX 9.0 3D游戏开发编程基础》书评
- DirectX 9.0 3D 游戏开发编程基础
- DirectX 9.0 3D游戏开发编程基础 [书评](zz)
- DirectX 9.0 3D 游戏开发编程基础 学习笔记(一)
- OGG 安装测试
- 在C语言中各种数据类型各占多少位
- linux后台运行命令
- COM(个人笔记)IUnknown接口
- const C++ 用法总结
- 【阅读笔记之二】《DIRECTX.9.0.3D游戏开发编程基础》:基础数学知识
- unsigned int转为十六进制方法
- Linux 套接字编程中的 5 个隐患
- JQuery-第二章 选择器
- Eclipse中文注释乱码解决
- Spring--quartz中cronExpression
- Struts2异常:ognl.OgnlException: target is null for setProperty
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新1
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新2