2009-12-22 5 views
0

MISE À JOUR 2: Il semble maintenant qu'il s'agit plus d'un problème de modélisation que d'un problème de programmation. Oups. Je suis novice dans le développement de XNA, et malgré mon expérience en C#, j'ai été coincé à un endroit pendant deux jours maintenant.Utilisation du shader 3D Studio Max DirectX dans un problème XNA

La situation: J'ai créé un modèle en 3D Studio Max 2010 qui utilise deux matériaux, tous deux de type DirectX Shader. Le modèle exporte vers FBX sans erreur et Visual Studio le compile correctement. Lorsque j'ai exécuté la méthode Draw() initialement, il a jeté une exception sur la partie 'BasicEffect' de l'une de mes boucles, démontrant (au moins pour moi) qu'il chargeait correctement le fichier .fx, qui doit être intégré dans le FBX fichier ou quelque chose.

Le problème: Lorsque vous utilisez le code suivant

foreach (ModelMesh mesh in map.Meshes) 
    { 
     foreach (Effect effect in mesh.Effects) 
     { 
      effect.CurrentTechnique = effect.Techniques["DefaultTechnique"]; 
      effect.Begin(); 
      effect.Parameters["World"].SetValue(Matrix.CreateTranslation(Vector3.Zero)); 
      effect.Parameters["View"].SetValue(ActiveCamera.ViewMatrix); 
      effect.Parameters["Projection"].SetValue(ActiveCamera.ProjectionMatrix); 
      effect.Parameters["WorldViewProj"].SetValue(Matrix.Identity * ActiveCamera.ProjectionMatrix); 
      effect.Parameters["WorldView"].SetValue(Matrix.Identity * ActiveCamera.ViewMatrix); 

      foreach (EffectPass ep in effect.CurrentTechnique.Passes) 
      { 
       ep.Begin(); 
       // something goes here? 
       ep.End(); 
      } 

      effect.End(); 
     } 

     mesh.Draw(); 
    } 

La seule chose qui se produit est une boîte blanche apparaît couvrant la moitié inférieure de l'écran, quelle que soit la position de la caméra ou de l'angle. J'ai obtenu le nom des paramètres d'effet du fichier default.fx spécifié dans Max (c'est dans [fichiers programme] \ autodesk \ 3ds Max 2010 \ maps \ fx). J'ai l'impression que je ne suis pas en mesure d'en corriger une ou toutes les autres. J'ai essayé de rechercher des tutoriels et de suivre leur code, mais rien de tout cela ne semble fonctionner pour mon modèle.

Une aide ou des idées?

MISE À JOUR: En faisant ces changements:

effect.Parameters["WorldViewProj"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix * Conductor.ActiveCamera.ProjectionMatrix); 
effect.Parameters["WorldView"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix); 

Le modèle a été en mesure de tirer. Cependant, tout est complètement blanc :(

Répondre

1

Malheureusement, surtout si vous ne voyez pas votre shader et/ou si vous ne savez pas quelle erreur vous obtenez, il sera difficile de déterminer ce qui ne va pas ici.

Ma suggestion est de commencer par un test plus simple: créer une boîte, appliquer un shader très simple ... et faire un rendu, puis ajouter un paramètre qui multiplie (par exemple) le composant rouge du pixel shader par le montant passé. Et rendre ce rendu avec succès

En simplifiant l'ensemble de problèmes, vous déterminez les nuances des shaders que les exportations max et comment vous définissez les propriétés. À un certain moment, vous réaliserez ce que vous faites mal et serez capable de l'appliquer à votre shader plus complexe.

Je suis très intéressé à entendre comment cela se passe ... assurez-vous de commenter cette fois une fois que vous l'avez réparé afin que je vois le résultat. Bonne chance! :-)

+0

Après plus de bricolage la nuit dernière, j'ai trouvé que mon code fonctionnait plus ou moins et que c'était un problème de modèle, pas un codage. Donc, une fois que je trouve comment faire correctement cela, je vais poster les résultats: P –