2011-05-02 5 views
1

Pourriez-vous m'aider avec les questions suivantes?Caméra XNA 3D et rotation de la face avant de la caméra d'affichage

  1. Comment puis-je pivoter (autour de l'axe Z) une position de la caméra autour d'un pivot comme Vector3?
  2. Comment puis-je pivoter (autour de l'axe Z) un objet quad positionné devant cette caméra et assurez-vous que le quad fait toujours face à la caméra autour du même pivot Vector3?

L'image de l'expliquer est ci-dessous:

Image showing the concept of a billboard

S'il vous plaît de bien vouloir répondre, merci

Répondre

0

En plus de tourner la caméra autour de ce point de vector3, vous pouvez utiliser aussi que la cible que la caméra regarde. Il suffit ensuite de transformer la position de la caméra autour de ce point. Il semble que le vecteur haut pour faire la caméra restera toujours le même. Vous mentionnez l'axe Z mais XNA est un système Y-up, donc à partir de votre image vous effectuerez des rotations autour de l'axe Y.

Vector3 pivotPoint = new Vector3(?, ?, ?); 
cameraPosition = Vector3.Transform(cameraPosition - pivotPoint, Matrix.CreateRotationY(anglePerFrame)) + pivotPoint; 
View = Matrix.CreatLookAt(cameraPosition, pivotPoint, Vector3.Up); 

Matrix billboardWorld = Matrix.Identity; 
billBoardWorld.Forward = Vector3.Normalize(cameraPosition - pivotPoint); 
billboardWorld.Right = Vector3.Normalize(Vector3.Cross(billboardWorld.Forward, Vector3.Up)); 
billboardWorld.Translation = cameraPosition - (billboardWorld.Backwards * distFromCamera); 
+0

Ok grand FIX la rotation de la caméra, merci Mais à propos du problème encore en face, tout d'abord j'utilise Vector3.Zero comme pivot, d'autre part je ne sais pas ce que signifie distfromcamera? est-ce la distance de chaque vecteur d'origine quad3 à la caméra ou quoi? J'essaie ceci: – user733916

+0

Matrix billboardWorld = Matrix.Identity; billboardWorld.Forward = Vector3.Normalize (camPosition - Vector3.Zero); billboardWorld.Right = Vector3.Normaliser (Vector3.Cross (billboardWorld.Forward, Vector3.Up)); billboardWorld.Translation = camPosition - (billboardWorld.Backward * (Vector3.Distance (camPosition, quad.Origin))); quad.World = billboardWorld; quad fait pivoter problème est d'abord le quad n'existe pas alors soudainement comme la caméra tournant dans le sens antihoraire, le quad apparaît de gauche à droite de la course de la caméra puis disparaître? – user733916

+0

'distanceFromCamera' signifie la distance (en unités xna) que vous voulez que le panneau d'affichage soit de l'appareil photo ... à quelle distance de l'appareil photo est le panneau d'affichage. –

0

Notez que XNA a une aide pour cette Matrix.CreateBillboard (...), bien que si vous avez accès à la matrice de la caméra, il est probablement plus simple de faire ce qui suit:

 var billboardWorld = Matrix.Invert(camera.ViewMatrix); 
     billboardWorld.Translation = billboardPosition; 
Questions connexes