【问题标题】:Do I need to map skeletal data into color image point? - kinect/XNA我需要将骨骼数据映射到彩色图像点吗? - kinect/XNA
【发布时间】:2012-10-10 17:34:07
【问题描述】:

我一直在做一个项目,我需要使用手关节与 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);
     }

【问题讨论】:

  • 如果您映射到颜色,它将转换为 RGB 图像空间(例如:2d),因此这不会真正适用于您的用例,因为您需要 3d 命中测试。
  • 完全正确。那么除了我目前用来使其与 3D 坐标空间一起工作的转换之外,还有其他方法吗?
  • 您可以将不同类型的公式应用于您的观点,您也可以使用 3d 转换,这几乎是相同的概念。
  • 你能举个例子吗..因为我使用的那个是错误绑定的,不适用于某些模型位置
  • 这取决于您的模型的组织方式,但对于快速命中测试,首先您应该确保所有模型都有一个边界体积(盒子或球体)。从那里进行命中测试非常简单快捷。 en.wikipedia.org/wiki/Bounding_volume

标签: kinect xna-4.0


【解决方案1】:

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

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

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

只是一个小建议 - 使用手的相对位置(例如肩部)总是好的。基于 Kinect 的游戏并不总是需要使用 Kinect 报告的绝对坐标(但您更清楚自己想要什么)

【讨论】:

    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多