2012-10-03 98 views
0

我一直在研究一個項目,我需要使用手關節與3D對象進行交互,現在我使用距離公式進行了操作,但是, 。我使用手關節(X,Y,Z)並使用公式將它們轉換爲3D空間,以便能夠與模型進行交互。我需要將骨骼數據映射到彩色圖像點嗎? - kinect/XNA

而不是使用公式進行轉換。 。我實際上是否需要使用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); 
    } 
+0

如果你映射到Color,它會轉換成RGB圖像空間(例如:2d)因爲你想要一個3d命中測試,所以你真的很適合你的用例。 – catflier

+0

確切地說..除了我目前用來使它與3D座標空間一起工作的轉換外,還有什麼呢? –

+0

您可以將不同類型的公式應用於您的觀點,您也可以使用3D變換,這大致是相同的概念。 – catflier

回答

0

其實,這是不容易尤其是建立有效的點擊測試時,有較大的物體的數量。

你需要的是一個碰撞系統。我給你的建議是,你應該使用一些現有的,例如BEPU可能會有所幫助: http://bepu.squarespace.com/

你應該對象的位置綁定手(通過Kinect的報道)的位置和BEPU將完成剩下的(它會在發生碰撞時觸發處理程序)。

只是一個小小的建議 - 使用手的相對位置(例如肩部)總是很好。使用Kinect報告的絕對座標對於基於Kinect的遊戲並不總是需要(但你更清楚你想要什麼)