Pregunta

Tengo un problema al importar un modelo 3D desde un archivo FBX.

El modelo fuente contiene 575 objetos + 1 cámara y se ve así: http://habreffect.ru/files/23d/542fa7f67/source_model.png

En XNA preparado con el modelo de canalización de contenido contiene 82 mallas y 576 huesos.Entonces, cuando dibujo mi modelo, solo veo una parte del modelo fuente.Imagen del resultado como la siguiente:http://habreffect.ru/files/28a/6e61c0215/Result_view.png

Mi código de dibujo:

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);

¿Cómo puedo obtener las 575 mallas en mi instancia de modelo en XNA?

¡Gracias!

UPD: Intenté importar mi modelo FBX a 3ds max, seleccionar todas las mallas y usar "Exportar seleccionados".El archivo FBX resultante es 11 veces más grande.Luego lo agrego como contenido al proyecto XNA, el modelo cargado contiene las 575 mallas y se procesó correctamente.

Desafortunadamente, este método de conversión manual no me conviene: necesito renderizar diversos modelos de fbx desde un repositorio mutable.

Entonces, ¿qué archivos FBX son "buenos" para el procesador de contenidos XNA (yo uso XNA 4)?

¿Fue útil?

Solución

Entonces, en MSDN Descubrí que FbxImporter está diseñado para funcionar con la versión 2006.11 del formato FBX.

Recientemente, Autodesk lanzó FBX Converter 2012.1 , que contiene otras herramientas, como FBX Eplorer, FBX Viewer.

El explorador FBX puede mostrar la estructura del archivo FBX y yo comparo el archivo exportado desde 3D MAX y el archivo FBX de origen. Tienen diferente formato interno. Intenté realizar la siguiente conversión: FBX - > Collada -> FBX, y el archivo FBX de resultado contiene una estructura de datos similar a la exportada desde MAX.

Entonces, simplemente agrego el resultado FBX al contenido de mi aplicación XNA, y se renderiza bien :)

Otra forma de hacerlo funcionar es utilizar Autodesk FBX SDK para leer manualmente el modelo y dibujarlo en XNA.

Conclusión :

  1. El trabajo correcto de XNA FbxImporter no depende de la versión (2006, 2011, etc.) y la forma (binario, ascii) del archivo FBX. La estructura de datos interna de FBX es mucho más importante.
  2. Para hacer que FBX sea "legible" para XNA Importer, puede usar la doble conversión como FBX -> Collada -> FBX
  3. También puede usar FBX SDK para cargar manualmente datos desde FBX

Otros consejos

Abra el modelo 3D en la última versión de 3dx max 2012 y expórtelo en .fbx formato.Este .fbx se carga correctamente con el cargador de modelos xna.Mientras exportas, puedes incluso incrustar los recursos, por lo que no tienes que agregarles texturas a través de XNA.

Estás usando instancias en 3DS MAX.Esto no es compatible directamente con XNA. Tienes que dibujar la malla para cada instancia de hueso tú mismo. Idealmente, en su lugar, usaría la creación de instancias de DirectX para dibujar cada malla una vez por hueso en una sola llamada a Draw (). Pero tienes que rodar tu propio código para hacer eso, convirtiendo los huesos en vértices de instancia. De forma predeterminada, XNA solo admite las operaciones más básicas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top