Direct3D游戏开发学习笔记3——D3D数学基础(初级篇) (转)
一、数学工具在虚拟3D世界中的作用、D3D与D3DX的关系:
1、数学的作用:数学是搭建虚拟3D世界的基础,角色控制、动画、关照计算、阴影计算、特效显示等等,数学在里面都起着支柱作用;
2、D3D与D3DX的关系:D3D是基本库的函数,任何跟基本渲染包括和硬件打交道的底层操作都在这里,它是必需。D3DX是扩展库函数,是做辅助开发用的,封装了很多方便使用的功能,就算没有它也可以完成所有的渲染,只是很多东西得自己动手写而已;
二、向量的定义、计算:
1、定义:既包括大小由包括方向的量,由两个顶点来描述(注意在D3D中所说的向量一般指自由向量,即起点为坐标原点的向量),在D3D中对应D3DVECTOR结构,在D3DX中对应D3DXVECTOR3,D3DXVECTOR3是对D3DVECTOR的继承,它保留D3DVECTOR的数据成员的同时还重载了向量运算可能出现的各种运算符(如==、!=、+、-、*、/);
2、计算:
1)判断向量相等 D3DX中对应==运算符;
2)向量的模/长度 D3DX中对应FLOAT D3DXVec3Length(CONST D3DXVECTOR3 *pV)接口;
3)向量加/减法 D3DX中对应+/-运算符;
4)向量单位化 即方向不变长度变为1 D3DX中对应D3DXVECTOR3 *WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV) 接口;
5)向量放缩 D3DX中对应*运算符;
6)向量点乘 结果用于判断两向量间的夹角 D3DX中对应FLOAT D3DXVec3Dot(CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2) 接口;
7)向量叉积 结果为垂直于参与计算的的两个向量,方向遵守右手法则(右手四指环绕相乘的两向量 大拇指指向的方向) D3DX中对应D3DXVECTOR3 *D3DXVec3Cross(D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2)接口;
三、矩阵、物体世界矩阵、计算:
1、矩阵:一个按行列排列的数组,在D3D中对应D3DMATRIX结构是一个4*4矩阵,在D3DX中对应D3DXMATRIX,D3DXVECTOR3MATRIX是对D3DMATRIX的继承,它保留D3DMATRIX的数据成员的同时还重载了向量运算可能出现的各种运算符(如==、!=、+、-、*、/);
2、物体世界矩阵:是对物体Look(面向方向)、Up(头顶方向)、Right(右手方向)、Position(位置向量)共四个向量进行分行存储得到的矩阵;
3、计算:
1)加/减/乘 D3DX中对应+/-/*运算符;
2)单位化 D3DX中对应D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pOut
)接口;
3)平移矩阵 D3DX中对应D3DXMATRIX *WINAPI D3DXMatrixTranslation(D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z)接口;
4)旋转矩阵 D3DX中对应D3DXMATRIX *WINAPI D3DXMatrixRotationX/Y/Z(D3DXMATRIX *pOut, FLOAT Angle)接口;
5)放缩矩阵 D3DX中对应D3DXMATRIX *WINAPI D3DXMatrixScaling(D3DXMATRIX *pOutFLOAT sx, FLOAT sy, FLOAT sz)接口;
注意:在对物体世界矩阵进行变换的顺序为:先放缩后旋转再平移
在对视矩阵进行变换的顺序为:先平移后旋转 无需放缩
四、其它常用数学函数和变换接口:
1、创建绕向量旋转的矩阵的函数:D3DXMATRIX *WINAPI D3DXMatrixRotationAxis( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);
2、用旋转矩阵旋转向量的函数:D3DXMATRIX *WINAPI D3DXMatrixRotationAxis( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);
说明:利用以上两个函数可以控制A向量绕B向量旋转
3、创建绕向量旋转的四元数的函数:D3DXQUATERNION *WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle);
4、创建绕X、Y、Z轴旋转的四元数的函数:D3DXQUATERNION *WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll);
5、转换四元数为旋转矩阵的函数:D3DXMATRIX *WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pOut, CONST D3DXQUATERNION *pQ);
来源:http://www.unjs.com/amathematics2/sx/amathematics2_10776.html