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);
     }
4

1 に答える 1

0

実際、オブジェクトの数が多い場合は特に、効果的なヒットテストを作成するのは簡単ではありません。

必要なのは衝突システムです。私がお勧めするのは、既存のものを使用することです。たとえば、BEPUが役立つ場合があります:http: //bepu.squarespace.com/

オブジェクトの位置を手の位置(Kinectによって報告される)にバインドする必要があり、BEPUが残りを実行します(衝突の場合にハンドラーをトリガーします)。

ちょっとしたアドバイスです。手の相対的な位置(肩など)を使用することをお勧めします。Kinectによって報告された絶対座標を使用することは、Kinectベースのゲームでは必ずしも望ましいとは限りません(ただし、必要なものはよくわかっています)。

于 2012-10-10T09:34:07.560 に答える