2012-03-19 1 views
1

Dans mon jeu XNA, j'utilise Viewport.Project pour obtenir les coordonnées 2d de l'écran des coordonnées 3D d'un soleil (principalement parce que c'est joli). J'ai quand même eu ce travail, quand je regarde dans les directions opposées du soleil, je vois 2 d'entre eux (techniquement, un). Je n'ai aucune idée de ce qui se passe ici ..Viewport.Project problems

Quelqu'un sait ce qui se passe? Et comment puis-je empêcher cela?

Pour aider à visualiser cela, voici une image de ce que je parle: Hyperlinked image, don't have 10+ rep

Voici le code:

 Rectangle clientBounds = Window.ClientBounds; 
     Texture2D sun = Content.Load<Texture2D>(@"Image\Skybox_Sun"); 
     Vector3 coords = new Vector3(1000, 0, 1000); 
     Vector3 coords1 = graphics.GraphicsDevice.Viewport.Project(coords, camera.Projection, camera.View, Matrix.Identity); 
     suncoords = coords1; 
     spriteBatch.Begin(); 
     spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
     spriteBatch.End(); 

Répondre

2

Avez-vous essayé de vérifier coords1.Z? J'imagine que le soleil derrière vous correspond à un Z négatif, auquel cas vous pourriez essayer d'ajouter une condition if avant tirage au sort comme celui-ci:

if(coords1.Z > 0) 
    spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
+0

Dans l'image, « Sun Coords » est les coordonnées d'écran du soleil. La seule chose qui varie entre ces deux est que le Z diminue d'une TRES, très petite valeur. – Jared

+0

Quoi qu'il en soit, je l'ai résolu en utilisant vue truster cueillette. Merci pour la suggestion de toute façon. – Jared

+0

Ah oui, maintenant je vois la position que vous imprimez sur les écrans ... Elle doit juste être entre 0 et 1 (pas <0 ou dans votre cas> 1). Je suis content que vous ayez réussi à le faire fonctionner. – LiquidAsh