2009-10-09 7 views
1

Je suis débutant en matière de graphisme 3D et j'apprends xna et csharp.xna: affiche les sprites 2d derrière l'objet 3d

J'ai un objet 3D que je veux dessiner devant un fond 2d, l'objet 3d est simple, c'est juste une ligne. Je l'ai fait à partir de 2 dimensions VertexPositionColor [].

puis je l'ai dessiné avec PrimitiveType.LineStrip.

et aussi j'ai un Texture2D que j'ai affiché avec Spritebatch.draw. Ce qui se passe est la ligne est affichée à l'arrière de l'arrière-plan, donc je ne vois pas de ligne. Mais si j'ai commenté le spritebatch.draw, je peux voir la ligne là-bas.

aidez s'il vous plaît ..

Répondre

2

Vous avez un problème de z-buffer ici. Dans quel ordre faites-vous le dessin 2D et 3D? 2D devrait venir en premier, je suppose. En outre, vous devez vérifier how to make render states work lors du mélange SpriteBatch et des opérations 3D.

+0

Je pensais que cela aussi. quand j'ai appliqué le code, il n'a toujours rien affecté – r4ccoon

1

J'ai réussi à le réparer. toute la méthode de dessin 3D devrait être après spritebatch.begin et fin.

ce que je ne l'ai été mis effect.begin et pass.begin après la spritebatch.begin et finissent

voici le code pour la méthode de tirage sur Game1.cs (le nom du fichier par défaut lorsque vous utilisez l'assistant)

protected override void Draw(GameTime gameTime) 
    { 
     graphics.GraphicsDevice.Clear(Color.Black); 

     spriteBatch.Begin();    
     GameEngine.Draw(GameEngine,gameTime); 
     spriteBatch.End(); 

     //resetRenderState3D(); 
     GameEngine.Draw3D(GameEngine, gameTime); 

     base.Draw(gameTime); 
    } 
+1

Donc, ce que vous dites essentiellement, c'est que ma réponse était correcte ..? ;) –

+0

ouais c'était correct. lol. mais après quelques changements dans le code, j'ai dû appliquer (décommenter le resetRenderState3D) l'état de rendu de réinitialisation à nouveau. bizarre .. mais ça a marché. – r4ccoon

+0

Bien. Oui, bizarre. Peut-être que laisser l'état de sauvegarde du lot d'images-objets aura le même effet que de réinitialiser l'état de rendu ... –

Questions connexes