2012-09-22 4 views
1

J'ai écrit un programme pour enregistrer les valeurs communes du squelette. . fondamentalement RightHand.joint pour obtenir les coordonnées X, Y, Z du capteur, maintenant je veux utiliser ces valeurs pour animer mon modèle 3D .. en quelque sorte, j'ai obtenu la formule pour convertir les valeurs x, y à la projection du monde réel, mais ne comprennent pas comment faire avec la coordonnée Z .. aussi je ne comprends pas pourquoi nous devons faire ce qui suitmappage x, y, z Coordonnées dans les coordonnées d'écran ou les coordonnées de projection dans Kinect à XNA

int x = (int) Math.Floor(((float.Parse(temp[0]) * 0.5f) + 0.5f) * maxWidth); 
int y = (int) Math.Floor(((float.Parse(temp[1]) * -0.5f) + 0.5f) * maxHeight); 

Isnt il suffit de multiplier juste les valeurs x et y par la largeur de l'écran & hauteur au lieu de faire * 0.5f (+ 0.5f). . Si quelqu'un pouvait expliquer cela serait très utile et aussi comment obtenir les coordonnées Z?

Voici le code:

 protected override void Update(GameTime gameTime) 
     { 
      //// TODO: Add your update logic here 
      using (StreamReader r = new StreamReader(f)) 
      { 
       string line; 
       Viewport view = graphics.GraphicsDevice.Viewport; 
       int maxWidth = view.Width; 
       int maxHeight = view.Height; 

       while ((line = r.ReadLine()) != null) 
       { 
        string[] temp = line.Split(','); 

     int x = (int)Math.Floor(((float.Parse(temp[0]) * 0.5f) + 0.5f) * maxWidth); 
     int y = (int)Math.Floor(((float.Parse(temp[1]) * -0.5f) + 0.5f) * maxHeight); 

     //Wrong Z - value Cal (Testing) 
     int z = (int)Math.Floor(((float.Parse(temp[2])* 0.5) + 0.5f) * maxHeight); 

       motion_z.Add(new Point3D(x, y, z)); 

      } 
     } 

      ModelPosition.X = (float)(motion_z[i].X); 
      ModelPosition.Y = (float)(motion_z[i].Y); 
      ModelPosition.Z = (float)(motion_z[i].Z); 

      i++; 
      base.Update(gameTime); 
     } 
+0

je le fais avec un autre aproche . Dans XNA, je donne la position de la valeur x, y, z au modèle sans modifications. Et avec la matrice mondiale, je peux zoomer, déplacer, faire pivoter le modèle. (Mon "modèle" est construit avec des cylindres et des sphères) – EdgarT

+0

Fondamentalement je veux que mon modèle ait un mouvement qui soit plus naturel. Par exemple. un poisson . . donc au lieu d'utiliser des fonctions compliquées pour faire ça je veux enregistrer un mouvement et l'animer –

+0

Pourriez-vous quand même m'expliquer la différence entre le squelette coordonné et la profondeur –

Répondre

0
int x = (int)Math.Floor(((float.Parse(temp[0]) * 0.5f) + 0.5f) * maxWidth); 
int y = (int)Math.Floor(((float.Parse(temp[1]) * -0.5f) + 0.5f) * maxHeight); 
int z = (int)Math.Floor(((float.Parse(temp[2])/4)* 20000)); 

motion_z.Add(new Point3D(x, y, z)); 

20000 est la valeur de la distance de profondeur que vous définissez dans la position de la caméra vector3 et il devrait animer correctement

Questions connexes