2016-07-28 6 views
1

私は、Final IKを使用して、KinectジョイントをUnity内のキャラクタのボディパートにリンクする方法を見つけようとしています。Kinectジョイントスケール

今のところ、すべてのジョイントはボディパーツと正しくリンクされています(移動でき、その動きはキャラクタに複製されます)が、ジョイント間のスケール(Kinectによって送信される)ボディパーツのスケールたとえば、Kinectが私の体を検出すると、キャラクターはそれ自身で崩壊するようです。私が動くと動きは検出されますが、キャラクターの体に比べて実際には小さいです。

2つのスケールを同期する方法はありますか?

ありがとうございました!

答えて

1

私はついにこれを行う方法を見つけました。それはかなりうまく機能します。私はこれを可能な限りシンプルに保つように努めます。

私が持っていた主な問題は、私のcaracterのサイズに適用可能なKinectジョイントからスケールの価値を得ることでした。

これを解決するために、私は次のアクションを実行するキャリブレーション方法を追加した:

  1. は、Tの位置を維持するようにユーザに確認して下さい。
  2. ユーザーの左腕の長さを読み取ります(kinect)
  3. ゲーム中のキャラクターの左腕の長さを読み取ります。
  4. 相対的な尺度を比較してください(例:キネクトが4の場合は左腕の長さを返し、カーアームの場合は左腕を2、尺度を4/2 = 2とします)

私は最初に小さな問題を抱えていましたが、解決しました。 UnityのKinectから返されるVector3の値は、Kinectの起点(カメラ)に関連しています。そこで、私はこれを解決するために線形代数のビットを使用しなければなりませんでした。両方のVector3(左肩と左肩)はKinectの起源に対して相対的なので、私は左腕の長さを見つけるためにそれらを引く必要がありました。 Linear Algebra Screenshot

線形代数のおかげで、A + C = Bなので、B - A = Cと言うことができます。このケースでは、LeftHand - LeftShoulder = Left Armです。この原理をkinectが受け取ったVector3に適用することによって、左腕を表すベクトルが得られるようになります。私たちがする必要があるのは、「マグニチュード」プロパティを取得し、その長さを持つことだけです。

それはかなりそれを要約します。