XNA那些事(五) 3D世界中的平移与旋转

 

   我发现XNA这方面的东西目前基本没什么人关注,所以动力真的不大,不过既然说了不是要把该做的东西做完。在本次还是要介绍一些概念性的东西,并在下一次会给大家一个例子,但是概念非常重要,我尽量用通俗的语言向大家介绍。
   说到这一节,也想请请大家考虑3D游戏与2D游戏最大的不同其实2D游戏最大的技术是控制精灵,并通过精灵来完成玩家与游戏之间的互动,而3D游戏虽然也是通过玩家控制精灵但是这里面的概念是不同的大家可以回想一下玩CS或者NFS的这些比较精典的3D游戏其实不是在控制精灵,而是控制视角,控制摄像机的视角。
  
那么摄像机这个概念咱们在上一次的时候曾经提到过,其实就是玩家看3D游戏的眼睛,那么这双眼睛当然是非常的重要,玩家在游戏中控制精灵的位置就是控制这个摄像机的位置,那么2D当中玩家控制精灵的位置,一般摄像机的位置并不变,大家可以想一下愤怒的小鸟,小鸟飞出之后其实在初始的情况下,画面并没有移动,而在小鸟的飞行后期画面会跟着移动,这其实是做摄像机的平移的动作。当然我们在这一讲当中并不是要向大家介绍如何做摄像机的平移,虽然他们和精灵或者其它物体的平移其实概念是一致的,但是一个摄像机的建模不是这节要讨论的。
   我们知道在XNA当中一般来说一个3D的模型文件是一个.X的方式存在的,当然渲染一个.X的3D MODEL是我们下次课的内容,不过请大家考虑一下原子模型,也就是最小化的一个3D的建模元素,其实是一个三角形,他被移做基元,基本的计算机3D建模都是以三角型为单位,通过记录三角形的顶点来完成整个建模的。
   那么有了这个概念我们就可以知道我们讨论的对象就可以以基元为对象了,因为他是组织一个MODEL的基本元素,讨论出了一个基元的移动方法那么整体的移动方法就有了--穷举出第一个基元并按照移动基元的方式来进行那么就完成了整个MODEL的移动。
一、那么咱们首先来说说如何做平移:
    那么什么是平移呢,这个倒是不难理解想一下想象一下你在玩CS的时候横向移动的情况这就是在做摄像机的平移,而物体或者说精灵的平移呢其实就是例如你的队友的移动反应在你的游戏世界中这里就是一个精灵的平移。我们之前说过了XNA在矩阵变换方面为我们做了很多工作,其实平移是要做矩阵乘法的,不过在XNA当中我们只需要这样Matrix.CreateTranslation并输入一个VECTOR3或者,XYZ的值就可以了。并把基元的WORLD矩阵与Matrix.CreateTranslation(VECTOR3)相乘就得到了了平移后的WORLD矩阵了。world *= Matrix.CreateTranslation(.01f, 0, 0); 这一句代码就可以了。
二、旋转
旋转其实也比较好理解,就是在玩CS的时候转身的动作其实就是做旋转,那么与平移类似,旋转是这样来做分两种试,一个是按照XYZ转进行旋转分别对应MatrixCreateRotationX,MatrixCreateRotationY,MatrixCreateRotationZ,那么执行world *= MatrixCreateRotationY(ANGLE)就可以完成以Y为轴的旋转了,也可以指定一个旋转轴,Matrix.CreateFromAxisAngle这个命令 除了角度还可以指定特定的旋转轴。

 

posted @ 2011-08-21 09:36  javawebsoa  Views(225)  Comments(0Edit  收藏  举报