1
我写了一个程序来记录骨架的关节值。 。基本上RightHand.joint从传感器获取X,Y,Z坐标,现在我想使用这些值来动画我的3D模型..不知何故,我已经获得了将x,y值转换为真实世界投影的公式,但是不知道如何做,与Z坐标..而且我不明白为什么我们需要做以下映射x,y,z坐标到Xine的Kinect中的屏幕坐标或投影坐标
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);
}
我这样做,用不同的形式给出。在XNA中,我将x,y,z值的位置赋予模型而无需修改。通过World Matrix我可以缩放,移动,旋转模型。 (我的“模型”是用圆柱体和球体构建的) – EdgarT
基本上我希望我的模型有一个更自然的运动。例如。一条鱼 。 。所以,而不是使用复杂的功能来做到这一点,我只是想记录一个议案,并动画它 –
你能否解释我的骨骼协调和深度之间的差异 –