XNA 4:导入FBX问题



我在从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);

我怎么能得到所有的575网格在我的模型实例在XNA?

谢谢!

UPD: 我尝试将我的FBX模型导入3ds max,选择所有网格并使用"Export selected"。结果FBX文件大11倍。然后我将其作为内容添加到XNA项目中,加载的模型包含了所有575个网格,并且渲染正确。

不幸的是,这种手动转换方法不适合我-我需要从可变存储库中呈现各种fbx模型。

那么,什么FBX文件是"好"的XNA内容处理器(我使用XNA 4)?

所以,在MSDN上我发现FbxImporter设计用于2006.11版本的FBX格式。

最近Autodesk发布了FBX Converter 2012.1,其中包含其他工具,如FBX Eplorer, FBX Viewer。

FBX资源管理器可以显示FBX文件的结构,我比较了从3D MAX导出的文件,和源FBX文件。它们有不同的内部格式。我尝试进行以下转换:FBX -> Collada -> FBX,结果FBX文件包含类似于从MAX导出的数据结构。

所以,我只是简单地将结果FBX添加到我的XNA应用程序的内容,它渲染得很好:)

另一种方法是使用Autodesk FBX SDK手动读取模型,并在XNA中绘制。

结论

:

  1. XNA FbxImporter正确的工作不依赖于版本(2006,2011等)和形式(二进制,ascii)的FBX文件。FBX内部数据结构更重要。
  2. 为了使FBX"可读"的XNA进口商,你可以使用双重转换,如FBX -> Collada -> FBX
  3. 您也可以使用FBX SDK手动从FBX加载数据

在最新的3dx max 2012中打开3d模型,并以.fbx格式导出。这个.fbx用xna模型加载器正确加载。在导出时,你甚至可以嵌入资源,所以你不必通过XNA添加纹理。

您正在使用3DS MAX实例化。XNA不直接支持这一点。你必须自己绘制每个实例骨骼的网格。理想情况下,你会使用DirectX实例在单个draw()调用中为每个骨骼绘制一次网格。但要做到这一点,你必须自己编写代码,将骨架转换为实例顶点。默认情况下,XNA只支持最基本的操作。

最新更新