2011-05-05 70 views
2

我从FBX文件导入3D模型时遇到问题。XNA 4:导入FBX问题

源模型包含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,选择所有网格并使用“导出选定”。结果FBX文件大11倍。然后我将它作为XNA项目的内容添加,加载的模型包含所有575个网格,并且它正确渲染。

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

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

回答

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. 为了使FBX “可读” 为XNA进口商您可以使用双变换像FBX - >的Collada - > FBX
  3. 您还可以使用FBX SDK的FBX手动加载数据
+0

感谢您的FBX转换器的链接。由于Blender以ASCII FBX格式导出,而不是二进制文件,因此我可以使用此应用程序将ASCII转换为二进制文件,从而导致极小的文件大小。一架简单的飞机从122.81 KB变为33.50 KB。 +1 – DMan 2011-06-18 04:16:22

0

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

0

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