Pergunta

Tenho um problema ao importar o modelo 3D do arquivo FBX.

O modelo de origem contém 575 objetos + 1 câmera e se parece com isto: http:// habreffect .ru / files / 23d / 542fa7f67 / source_model.png

No XNA preparado com conteúdo, o modelo de pipeline contém 82 malhas e 576 bones. Portanto, quando desenho meu modelo, vejo apenas parte do modelo de origem. Imagem de resultado como a seguir: http://habreffect.ru/files/28a/6e61c0215/Result_view.png

Meu código de desenho:

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

Como posso obter todas as 575 malhas em minha instância de Model no XNA?

Obrigado!

UPD : tentei importar meu modelo FBX para o 3ds max, selecione todas as malhas e use "Exportar selecionados". Resultado O arquivo FBX é 11x maior. Em seguida, adiciono-o como conteúdo ao projeto XNA, o modelo carregado contém todas as 575 malhas e é renderizado corretamente.

Infelizmente, este método de conversão manual não combina comigo - preciso renderizar diversos modelos fbx a partir de um repositório mutável.

Então, quais arquivos FBX são "bons" para o processador de conteúdo XNA (eu uso o XNA 4)?

Foi útil?

Solução

Portanto, em MSDN Descobri que o FbxImporter foi projetado para funcionar com a versão 2006.11 do formato FBX.

Recentemente, a Autodesk lançou o FBX Converter 2012.1 , que contém outras ferramentas, como FBX Eplorer, FBX Viewer.

O FBX explorer pode mostrar a estrutura do arquivo FBX, e eu comparo o arquivo 3D MAX exportado com o arquivo FBX de origem. Eles têm formato interno diferente. Tentei fazer a seguinte conversão: FBX - > Collada -> FBX, e o arquivo FBX de resultado contém semelhante ao exportado da estrutura de dados MAX.

Então, simplesmente adiciono o resultado FBX ao conteúdo do meu aplicativo XNA, e ele é bem renderizado :)

Outra maneira de fazer isso funcionar é usar o Autodesk FBX SDK para ler o modelo manualmente e desenhá-lo em XNA.

Conclusão :

  1. O trabalho correto do XNA FbxImporter não depende da versão (2006, 2011, etc) e da forma (binário, ascii) do arquivo FBX. A estrutura de dados interna do FBX é muito mais importante.
  2. Para tornar o FBX "legível" para o importador XNA, você pode usar a conversão dupla como FBX -> Collada -> FBX
  3. Você também pode usar o FBX SDK para carregar manualmente os dados do FBX

Outras dicas

Abra o modelo 3d no último 3dx max 2012 e exporte-o no formato .fbx.Este .fbx é carregado corretamente com o carregador de modelo xna.Durante a exportação, você pode até incorporar os recursos, para que não precise adicionar texturas por meio do XNA.

Você está usando a instanciação no 3DS MAX.Isso não é suportado diretamente pelo XNA. Você mesmo deve desenhar a malha para cada osso de instância. O ideal é que você usasse a instanciação do DirectX para desenhar cada malha uma vez por osso em uma única chamada Draw (). Mas você tem que rolar seu próprio código para fazer isso, convertendo os ossos em vértices de instância. Por padrão, o XNA oferece suporte apenas às operações mais básicas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top