1

我编写了一个程序来记录 Skeleton 的关节值。. 基本上 RightHand.joint 从传感器获取 X、Y、Z 坐标,现在我想使用这些值来为我的 3D 模型设置动画.. 不知何故,我得到了将 x、y 值转换为真实世界投影的公式,但是不明白如何用 Z 坐标做到这一点。我也不明白为什么我们需要执行以下操作

 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);

仅将 x 和 y 值乘以屏幕宽度和高度而不是执行 *0.5f (+0.5f) 还不够。. 如果有人可以解释这将非常有帮助,以及如何获得 Z 坐标?

这是代码:

      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);
       }
4

1 回答 1

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 是您在 vector3 相机位置中定义的深度距离值,它应该正确设置动画

于 2012-09-25T13:25:11.807 回答