2010-11-17 7 views
0

J'ai une question très n00b comme ici .. J'ai ce petit jeu XNA dans lequel j'ai essayé d'importer un modèle 3D déjà fait et fourni par Microsoft. Le problème est que XNA ne charge pas les textures associées à ce modèle, même s'il s'assure que les associés au modèle sont présents dans le répertoire du projet (le compilateur donne une erreur s'il ne trouve pas ces textures), .. au fond, je vois juste un grand modèle d'argile: P ..XNA ne charge pas les textures du modèle automatiquement

Cette image montre le résultat que je reçois:

http://img217.imageshack.us/img217/8873/wronge.png

C'est ce qu'il devrait être comme:

http://img508.imageshack.us/img508/5971/correct.png

Y a-t-il quelque chose qui me manque ici? XNA ne devrait-il pas appliquer automatiquement toutes les textures associées à un modèle spécifique?

+2

Pouvez-vous fournir le code sur l'endroit où vous chargez cette texture? –

Répondre

1

Lorsque vous êtes rendu modèle dude.fbx, assurez-vous que dans la boucle pour dessiner le modèle que vous avez quelque chose comme ce qui suit:

foreach (ModelMesh mesh in model.Meshes) 
{ 
    foreach (BasicEffect effect in mesh.Effects) 
    { 
     effect.EnableDefaultLighting(); 
    } 
} 

Ceci est du haut de ma tête, de sorte que les appels de méthode pourrait ne pas être correct.

0

Xna ne charge pas automatiquement les textures du modèle. L'exception que vous obtenez lorsque la texture n'est pas présente est levée par le compilateur de ressources de Xna et n'est pas liée à l'importation de quoi que ce soit.

La façon dont vous résoudre ce problème est en chargeant la texture manuellement dans LoadContent() ou partout ailleurs où vous avez un ContentManager en utilisant:

modelTexture = Content.Load<Texture2D>("mytexture"); 

, puis ajoutez la texture soit en tant que paramètre si vous avez un effet personnalisé ou le mettre dans la propriété Texture sur votre BasicEffect par exemple lorsque vous dessinez:

foreach (ModelMesh mesh in model.Meshes) 
{ 
    foreach (BasicEffect eff in mesh.Effects) 
    { 
     eff.TextureEnabled = true; 
     eff.Texture = modelTexture; 
    } 
    mesh.Draw(); 
} 

(dessin doit évidemment pas être fait dans LoadContent() bien)

Notez le eff.TextureEnabled = true; qui est requis pour activer les textures lors de l'utilisation de BasicEffect.