D3D数学基础(初级篇)

来源:互联网 发布:卡盟附带支付源码 编辑:程序博客网 时间:2024/05/20 07:34

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);

原创粉丝点击