2

从 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 中的模型实例中获取所有 575 个网格?

谢谢!

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

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

那么,对于 XNA 内容处理器(我使用 XNA 4)来说,什么 FBX 文件是“好”的?

4

3 回答 3

2

因此,在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 的正确工作不依赖于 FBX 文件的版本(2006、2011 等)和格式(二进制、ascii)。内部 FBX 数据结构更为重要。
  2. 要使 XNA Importer 的 FBX “可读”,您可以使用双重转换,例如 FBX -> Collada -> FBX
  3. 您还可以使用 FBX SDK 从 FBX 手动加载数据
于 2011-05-11T03:49:11.757 回答
0

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

于 2012-08-08T10:13:32.513 回答
0

您在 3DS MAX 中使用实例化。XNA 不直接支持此功能。您必须自己为每个实例骨骼绘制网格。理想情况下,您应该使用 DirectX 实例化在单个 Draw() 调用中为每个骨骼绘制每个网格一次。但是你必须通过将骨骼转换为实例顶点来滚动你自己的代码来做到这一点。默认情况下,XNA 只支持最基本的操作。

于 2012-11-10T08:04:44.543 回答