XNA之进阶--3D模型的加载和控制

2019-04-14 21:33发布

Ok,我们要显示3d模型,所以我们首先需要对应的模型,新建一个spacewar工程,但是我们只想要美术资源,而不是要整个未编译的代码,所以我们的第一项工作就是把美术资源独立出来.我们来创建一个空战(Spacewar)Starter Kit工程. 新建一个windowsgeme工程,我们看到已经为我们准备好了一个名为content的文件夹,我们的所有素材都将放到这个文件夹里,新建一个Audio文件夹,在该文件夹下新建一个Textures和Models文件夹;如果观察代码的话,我们可以看到Content.RootDirectory = "Content";在这里我们就设置了游戏素材加载的根目录是在Content文件夹下; 我们需要两件美术资源.第一个是将放入Content/Models文件夹的3D模型,第二个是需要贴在3D模型上的一个纹理,它将被放在Content/Textures文件夹;
  • 在解决方案管理器中右键点击Models文件夹,选择添加,然后选择已有项... 使用弹出的对话框浏览到你放置空战的那个路径,找到Contents/Models文件夹,选择p1_wedge.fbx如果你看不到任何文件,请确认你把文件类型下拉列表中选择了Content Pipeline Files.点击OK.
  • 在解决方案管理器中右键点击Textures文件夹,然后选择已有项... 使用弹出的对话框浏览到你放置空战的那个路径,找到Contents/Textures文件夹,选择wedge_p1_diff_v1.tga ,点击OK.
  • 在所有的素材都添加完毕之后,资源管理器中将显示如下:Snap2
  • 当文件加入到工程以后,素材管道将自动把它们识别成素材文件,并且给它设置一个合适的素材处理器,这些都是自动的,你无需做任何事
好的,所有的准备 工作都做好了,下面就是从游戏里加载素材。在game.cs中,在LoadContent中我们加载所有的资源Snap3 这是xna1.x版本的方法,在新的版本中,应该在 LoadContent函数中加载模型;注意你必须传入资源相对于工程目录的路径,另外要注意资源名不带任何扩展名.资源名称可以是任意的,但是缺省的资源名称是文件名去掉扩展名; 这样就将资源加载在了工程中,下面我们要做的是显示该模型:
  • Draw函数中,我们将把模型绘制到屏幕上,带纹理和灯光.
  • Update函数中,我们将按时间改变模型的方位,这样它将随时间而旋转.
我们先来做最难的那部分工作:绘制模型.我们要做的是使用一些XNA Framework函数来设置模型的坐标,然后在屏幕上绘制模型并打光:
  • 在代码中找到Draw函数. 修改代码如下Snap4
首先定义一个Vector3的对象,用来存储当前对象的空间坐标