2012-01-18 1 views
0

J'ai créé une scène dans 3DS Max avec un modèle de moteur de stock et certaines choses j'ai ajouté mon moi, l'avion et le bouton.XNA import modèle - Toutes les mailles apparaissent les uns sur les autres

http://i.stack.imgur.com/R2iva.png

Quelle que soit la façon dont j'exporter la scène, que ce soit son comme .X utilisant exportateur de panda ou .fbx utilisant 2012,2 exportateur FBX fois, lorsqu'il est chargé dans XNA et rendu, apparaissent tous les uns sur les autres.

http://i.stack.imgur.com/6gdMb.png

Depuis les différentes parties du moteur tout rester là où ils devraient (et sont séparés dans 3ds max) im assez sûr qu'il ya quelque chose im réglage pas correctement dans 3ds max avec la disposition du reste de ma objets.

Mise à jour 1: Le code i utiliser pour charger les modèles XNA est le suivant

 Matrix[] transforms = new Matrix[model.Bones.Count]; 
     model.CopyAbsoluteBoneTransformsTo(transforms); 

     foreach (ModelMesh mesh in model.Meshes) 
     { 
      foreach (BasicEffect be in mesh.Effects) 
      { 
       be.EnableDefaultLighting(); 
       be.Projection = camera.projection; 
       be.View = camera.view; 
       be.World = GetWorld() * mesh.ParentBone.Transform; 
       // adding the additional * transforms[i]; didnt do anything 

      } 
      mesh.Draw(); 
     } 

Ce code fonctionne très bien pour les modèles d'autres peuples, mais pas que je fais. C'est comme si 3ds max n'exporte pas les positions des objets que je crée dans la scène par rapport à l'origine des scènes.

+0

Juste pour que vous le sachiez, l'exportateur panda X ne fonctionne parfois pas correctement avec XNA. – annonymously

+0

Avez-vous essayé de télécharger un modèle sur Internet et de l'utiliser pour tester si c'est votre code ou le modèle? – annonymously

Répondre

1

Vous devez combiner toutes les transformer matrices d'os mères et des os de l'enfant comme celui-ci:

Matrix[] transforms = new Matrix[model.Bones.Count]; 
model.CopyAbsoluteBoneTransformsTo(transforms); 

foreach (ModelMesh mesh in model.Meshes) { 
    foreach (BasicEffect ef in mesh.Effects) { 
     ef.World = transforms[mesh.ParentBone.Index]; 
     //Also do other stuff here, set projection and view matrices 
    } 
} 

Il y a probablement une meilleure façon, mais ce code devrait fonctionner.

+0

Je ne pense pas que vous avez besoin de l'addition '* transforme [i]' –

+0

@Neil Si vous pouvez confirmer cela, je vais l'enlever – annonymously

+0

Mis à jour ma réponse avec le code que j'utilise pour montrer comment im chargement dans les modèles – jordanrs

Questions connexes