我是否需要将骨架数据映射到彩色图像点? - kinect / XNA

时间:2012-10-03 11:13:52

标签: kinect xna-4.0

我一直致力于一个项目,我需要使用手部关节与3D对象进行交互,现在我使用距离公式进行交互,但是。 。我正在使用手部关节(X,Y,Z)并使用公式将它们转换为3D空间,以便能够与模型进行交互。

而不是使用公式来进行转换。 。我真的需要使用MapSkeletalpoint函数来着色图像点吗?

要了解我正在做的事情:

         var rightHands = playerSkeleton.Joints[JointType.HandRight];
         var rightHandsX = rightHands.Position.X;
         var rightHandsY = rightHands.Position.Y;
         var rightHandsZ = rightHands.Position.Z;


          HandX = rightHands.Position.X;
          HandY = rightHands.Position.Y;
          HandZ = rightHands.Position.Z;

    foreach (_3DModel s in Solar)
    {
         x_mod = (float)Math.Floor(((HandX * 0.5f)) * maxWidth);
         y_mod = (float)Math.Floor(((HandY * -0.5f)) * maxHeight);
         z_mod = (float)Math.Floor((HandZ) / 4 * 20000);



  if (Math.Sqrt(Math.Pow(x_mod - s.modelPosition.X, 2) + Math.Pow(y_mod- s.modelPosition.Y, 2) + Math.Pow(z_mod - s.modelPosition.Z,2)) < 20)
     {

          sound.Play();
         Console.WriteLine("1" + "handx:" + x + "," + " " + "modelPos.X:" + s.modelPosition.X + "," + " " + "handY:" + y + "modelPos.Y:" + s.modelPosition.Y);
     }

1 个答案:

答案 0 :(得分:0)

实际上,创建有效的命中测试并不容易,尤其是当对象数量较多时。

你需要的是碰撞系统。我给你的建议是你应该使用一些现有的,例如BEPU可能会有所帮助: http://bepu.squarespace.com/

您应该将对象的位置与手的位置绑定(由Kinect报告),BEPU将完成其余的操作(如果发生碰撞,它将触发处理程序)。

只是一个小建议 - 使用手的相对位置(例如肩膀)总是好的。在基于Kinect的游戏中,并不总是需要使用Kinect报告的绝对坐标(但你知道你想要的更好)