我编写了一个程序来记录 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);
}