《DirectX 9.0 3D 游戏开发编程基础》学习笔记#1
工作略忙,上个礼拜都在加班中度过,那么今天开始写吧,争取每天抽一点时间来看书和更新博客。以及由于之前CSDN博客被误封的教训,现在维护两份博客,一份CSDN(地址:http://blog.csdn.net/joshualing),一份博客园。
《DirectX 9.0 3D 游戏开发编程基础》第一部分介绍有关的数学知识,主要是向量和矩阵的知识,大学里学过的东西就不在这里赘述了。
将三维的向量放进一个1*4的矩阵里(或称4维向量),将第四列值w置为1或者0,为可平移或不可平移的标志,即当使用一个4*4的矩阵对向量进行相乘平移时
w位的1可以使平移操作有效,0无效。
向量旋转,下图矩阵为按X轴旋转矩阵。设三维向量v=(x,y,z),放入1*4单行矩阵v'=(x,y,z,1),此处第四维值应不影响旋转,左乘下列矩阵得v''=(x,y*cosθ-z*sinθ,y*sinθ+z*cosθ,1)。其实这里在一个二维坐标系上看比较明显能看出来如何旋转的,本身三维向量围绕坐标轴旋转时肯定有一维坐标值不变,旋转则是在另两维的投影平面上做旋转。按Y、Z轴旋转类似。
平面通过一个四维向量表示,(n,d)表达公式n·p+d=0。判断点p与平面n的关系,n·p+d=0则点p与平面共面,n·p+d>0则点p在平面的前面且在平面的正半空间里,n·p+d<0则点p在平面的背面且在平面的负半空间里。创建一个平面的两种方式,方法一已知向量n与点p通过公式n·p+d=0算出d;方法二通过三个点知平面上两个向量,通过向量叉积知平面法向量,再通过方法一求得平面四维向量。
标准化平面,通过将法向量转化为单位向量来求得平面四维向量,即原有(n,d)除以法向量的模|n|。变换平面时应首先进行标准化平面。
射线的公式p(t)=p0+tu,p0是射线起点,u是射线的方向,t是参数。线与平面相交,将线公式带入平面公式,算出t在0到正无穷之间,则射线与平面相交,否则不相交。
第一部分到此结束,基本上是介绍了一些数学知识,基本都是学校里学过的,博主由于暂时没找到合适的DX开发包暂时就不把DX提供的相应函数在此例举,以后用到时再做说明。