2016-07-28 33 views
1

Ich versuche einen Weg zu finden, die Kinect-Gelenke mit den Körperteilen eines Charakters in Unity zu verbinden, indem ich Final IK verwende.Kinect Joint Scale

Im Moment sind alle Gelenke korrekt mit den Körperteilen verbunden (ich kann mich bewegen und die Bewegung wird zum Charakter dupliziert), aber es scheint als wäre die Skala zwischen den Gelenken (gesendet von der Kinect) viel kleiner die Skala der Körperteile. Zum Beispiel, wenn der Kinect meinen Körper entdeckt, scheint der Charakter auf sich selbst zu kollabieren. Wenn ich mich bewege, wird die Bewegung erkannt, aber sie ist im Vergleich zum Körper des Charakters sehr klein.

Gibt es eine Möglichkeit, diese beiden Skalen zu synchronisieren?

Vielen Dank!

Antwort

1

Ich habe endlich einen Weg gefunden, dies zu tun und es funktioniert ganz gut. Ich werde versuchen, das so einfach wie möglich zu halten.

Das Hauptproblem, das ich hatte, war, einen Wert der Skala von den Kinect-Verbindungen zu erhalten, die auf die Größe meines Charakters anwendbar sein würden.

Um dies zu lösen, habe ich ein Kalibrierverfahren, das die folgenden Aktionen ausführt:

  1. die Benutzer Stellen Sie eine T Position zu halten.
  2. Liest die Länge des linken Arms des Benutzers (kinect)
  3. Liest die Länge des linken Arms des Charakters im Spiel.
  4. Vergleichen Sie beide Längen und finden Sie eine relative Skala (zB: wenn die linken Armlängen vom Kinect zurückgegeben werden, wenn 4 und der Charakter einen linken Arm von 2 hat, dann ist die Skala 4/2 = 2)

Ich hatte zuerst ein kleines Problem, aber endete es zu lösen. Die von Kinect in Unity zurückgegebenen Werte von Vector3 beziehen sich auf den Ursprung des Kinect (Kamera). Dafür musste ich etwas lineare Algebra verwenden, um das zu lösen. Da sowohl Vector3 (linke Hand als auch linke Schulter) relativ zum Ursprung der Kinect sind, musste ich sie subtrahieren, um die linke Armlänge zu finden.

Dank der linearen Algebra, wissen wir, dass A + C = B, daher können wir sagen, dass B - A = C. In unserem Fall, LeftHand - LeftShoulder = Left Arm. Durch Anwenden dieses Prinzips auf den Vector3, der von dem Kinect empfangen wurde, haben wir nun den Vektor, der den linken Arm darstellt. Alles, was wir tun müssen, ist die Eigenschaft "Magnitude", und wir haben jetzt seine Länge.

Das fasst es ziemlich zusammen.