最近在研究XNA,正好将一些学习过程中的心得写下来。
XNA中显示模型是需要通过XNA的pipeline来实现的,一般来说,XNA自带了两类3D模型的导入处理器,可以分别处理.FBX文件和.x文件,其中.x文件在DirectX 3D编程中应用得比较广泛,而.FBX文件则能很方便的由3DsMax中导出,所以我决定采用.FBX文件作为模型的载体。
(一)让3DsMAX能导出.FBX类型的文件
一般来说,如果你安装的是完整版的3DsMAX,FBX的插件一般就一并安装上了,如果安装的是精简版,那么就需要手动安装FBX导出插件。
Autodesk官方提供的FBX插件下载地址:http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=6839916
安装完FBX插件后,3DsMAX就拥有了导出FBX文件的能力,如下图所示:
因为我们只需要很简单的模型,因此只要将模型的Mesh结构导出即可。所以全部选项都按默认即可。
(二)在XNA中渲染FBX模型
打开Visual Studio,新建一个XNA Games项目。
然后导入刚才生成的fbx文件。
XNA中显示模型是需要通过XNA的pipeline来实现的,一般来说,XNA自带了两类3D模型的导入处理器,可以分别处理.FBX文件和.x文件,其中.x文件在DirectX 3D编程中应用得比较广泛,而.FBX文件则能很方便的由3DsMax中导出,所以我决定采用.FBX文件作为模型的载体。
(一)让3DsMAX能导出.FBX类型的文件
一般来说,如果你安装的是完整版的3DsMAX,FBX的插件一般就一并安装上了,如果安装的是精简版,那么就需要手动安装FBX导出插件。
Autodesk官方提供的FBX插件下载地址:http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=6839916
安装完FBX插件后,3DsMAX就拥有了导出FBX文件的能力,如下图所示:
因为我们只需要很简单的模型,因此只要将模型的Mesh结构导出即可。所以全部选项都按默认即可。
(二)在XNA中渲染FBX模型
打开Visual Studio,新建一个XNA Games项目。
然后导入刚才生成的fbx文件。
接下来就是程序部分了:
我们先声明一个模型对象——
1 Model guidao;
然后在LoadContent()方法实例化该对象——
guidao = Content.Load<Model>("guidao");
最后就是最重要的环节了——三大矩阵(摄影机)的设定,我将其实现在了DrawModel()方法内:
private void DrawModel(Model m) { Matrix[] transforms = new Matrix[m.Bones.Count]; float aspectRatio = graphics.GraphicsDevice.Viewport.Width / Graphics.GraphicsDevice.Viewport.Height; m.CopyAbsoluteBoneTransformsTo(transforms); Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f); Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, Height, Zoom), Vector3.Zero, Vector3.Up); foreach (ModelMesh mesh in m.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.View = view; effect.Projection = projection; effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Vector3.One); } mesh.Draw(); } }
之后在Draw()方法内调用
DrawModel(guidao);
按F5执行——