从FBX文件导入3D模型时遇到问题。
源模型包含575个对象+ 1个摄像头,如下所示:http://habreffect.ru/files/23d/542fa7f67/source_model.png
在XNA中准备的内容管道模型包含82个网格和576个骨骼。 所以,当我绘制模型时,我只看到源模型的一部分。结果图如下: http://habreffect.ru/files/28a/6e61c0215/Result_view.png
我的绘图代码:
GraphicsDevice.Clear(Color.CornflowerBlue);
Matrix[] transforms = new Matrix[_model.Bones.Count];
_model.CopyAbsoluteBoneTransformsTo(transforms);
foreach (var mesh in _model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.LightingEnabled = true;
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] * _world;
effect.View = _view;
effect.Projection = _proj;
}
mesh.Draw();
}
base.Draw(gameTime);
如何在XNA中的Model实例中获取所有575个网格?
谢谢!
UPD :我尝试将我的FBX模型导入3ds max,选择所有网格并使用“导出所选”。结果FBX文件大11倍。然后我将它作为内容添加到XNA项目中,加载的模型包含所有575个网格,并且它正确呈现。
不幸的是,这种手动转换方法并不适合我 - 我需要从可变存储库中渲染各种fbx模型。
那么,什么FBX文件对XNA内容处理器“好”(我使用XNA 4)?
答案 0 :(得分:2)
所以,在MSDN上我发现FbxImporter设计用于2006.11版本的FBX格式。
最近Autodesk发布了FBX Converter 2012.1,其中包含其他工具,如FBX Eplorer,FBX Viewer。
FBX explorer可以显示FBX文件的结构,我比较从3D MAX文件和源FBX文件导出。它们具有不同的内部格式。我尝试进行以下转换:FBX - > Collada - > FBX和结果FBX文件包含类似于从MAX数据结构导出的内容。
所以,我只是将结果FBX添加到我的XNA应用程序的内容中,并且渲染得很好:)
使其工作的另一种方法是使用Autodesk FBX SDK手动读取模型,并在XNA中绘制。
结论:
答案 1 :(得分:0)
在最新的3dx max 2012中打开3d模型,并以.fbx
格式导出。使用xna模型加载器正确加载此.fbx
。在导出时,您甚至可以嵌入资源,因此您无需通过XNA为其添加纹理。
答案 2 :(得分:0)
您正在3DS MAX中使用实例化。 XNA不直接支持此功能。 您必须自己为每个实例骨骼绘制网格。 理想情况下,您可以使用DirectX实例在单个Draw()调用中为每个骨骼绘制一次网格。 但是你必须通过将骨骼转换为实例顶点来滚动自己的代码来实现这一点。 默认情况下,XNA仅支持最基本的操作。