Нужно ли отображать данные скелета в точку цветного изображения? - кинект/XNA

Я работаю над проектом, в котором мне нужно взаимодействовать с 3D-объектами с помощью сустава руки, теперь я делаю это, используя формулу расстояния, но тем не менее. . я использую ручное соединение (X, Y, Z) и использую формулу для преобразования их в трехмерное пространство, чтобы иметь возможность взаимодействовать с моделями.

Вместо использования формулы для преобразования. . мне действительно нужно использовать функцию 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);
     }

person Sweta Dwivedi    schedule 03.10.2012    source источник
comment
Если вы сопоставите цвет, он будет преобразован в пространство изображения RGB (например, 2d), так что это не будет действительно применимо к вашему варианту использования, так как вам нужен тест на попадание в 3d.   -  person mrvux    schedule 03.10.2012
comment
Точно ... Так есть ли в любом случае, помимо преобразований, которые я сейчас использую, чтобы заставить его работать с трехмерным координатным пространством?   -  person Sweta Dwivedi    schedule 03.10.2012
comment
Существуют разные типы формул, которые вы можете применить к своей точке, вы также можете использовать 3D-преобразования, это в основном та же концепция.   -  person mrvux    schedule 03.10.2012
comment
Не могли бы вы привести пример или около того, потому что тот, который я использую, связан с ошибкой и не будет работать для определенных позиций модели.   -  person Sweta Dwivedi    schedule 03.10.2012
comment
Это будет зависеть от того, как организованы ваши модели, но для быстрого теста сначала вы должны убедиться, что все ваши модели имеют ограничивающий объем (прямоугольную или сферическую). Хит-тест оттуда очень простой и быстрый. en.wikipedia.org/wiki/Bounding_volume   -  person mrvux    schedule 03.10.2012


Ответы (1)


На самом деле, создать эффективный тест на попадание непросто, особенно при большом количестве объектов.

То, что вам нужно, это система столкновений. Я рекомендую вам использовать некоторые существующие, например, BEPU может быть полезен: http://bepu.squarespace.com/

Вы должны связать положение объекта с положением руки (сообщается Kinect), а BEPU сделает все остальное (он вызовет обработчик в случае столкновения).

Небольшой совет - всегда полезно использовать относительное положение руки (например, к плечу). Использование абсолютных координат, сообщаемых Kinect, не всегда желательно в играх на основе Kinect (но вы лучше знаете, чего хотите)

person bubo    schedule 10.10.2012