|
@@ -15,9 +15,6 @@ public class BodySourceView : MonoBehaviour
|
|
|
public bool wristLeftLate;
|
|
|
public bool wristRightLate;
|
|
|
|
|
|
- [HideInInspector]
|
|
|
- public float scale;
|
|
|
-
|
|
|
private Dictionary<ulong, GameObject> _Bodies = new Dictionary<ulong, GameObject>();
|
|
|
private BodySourceManager _BodyManager;
|
|
|
|
|
@@ -133,7 +130,8 @@ public class BodySourceView : MonoBehaviour
|
|
|
Rigidbody rb = jointObj.AddComponent<Rigidbody>();
|
|
|
rb.useGravity = false;
|
|
|
rb.isKinematic = true;
|
|
|
- } else if (jt == Kinect.JointType.WristRight)
|
|
|
+ }
|
|
|
+ else if (jt == Kinect.JointType.WristRight)
|
|
|
{
|
|
|
jointObj.tag = "WristRight";
|
|
|
Rigidbody rb = jointObj.AddComponent<Rigidbody>();
|
|
@@ -161,6 +159,19 @@ public class BodySourceView : MonoBehaviour
|
|
|
|
|
|
private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject)
|
|
|
{
|
|
|
+ Vector3[] initJoints = new Vector3[25];
|
|
|
+ for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++)
|
|
|
+ {
|
|
|
+ Kinect.Joint sourceJoint = body.Joints[jt];
|
|
|
+
|
|
|
+ initJoints[(int)jt] = GetVector3FromJoint(sourceJoint);
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: use this method
|
|
|
+ Vector3[] rescaledJoints = RescaleJoints(initJoints);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++)
|
|
|
{
|
|
|
Kinect.Joint sourceJoint = body.Joints[jt];
|
|
@@ -172,8 +183,9 @@ public class BodySourceView : MonoBehaviour
|
|
|
}
|
|
|
|
|
|
Transform jointObj = bodyObject.transform.Find(jt.ToString());
|
|
|
- jointObj.localPosition = GetVector3FromJoint(sourceJoint);
|
|
|
-
|
|
|
+ //jointObj.localPosition = GetVector3FromJoint(sourceJoint);
|
|
|
+ jointObj.localPosition = rescaledJoints[(int)jt];
|
|
|
+
|
|
|
if (jt == Kinect.JointType.Head)
|
|
|
{
|
|
|
// Make head joint invisible
|
|
@@ -206,17 +218,18 @@ public class BodySourceView : MonoBehaviour
|
|
|
{
|
|
|
if (modeController.feedback == ModeController.Feedback.ColorFeedback)
|
|
|
{
|
|
|
- // TODO: Change to red color
|
|
|
jointObj.GetComponent<Renderer>().material.color = new Color(1, 0, 0);
|
|
|
jointObj.GetComponent<LineRenderer>().startColor = new Color(1, 0, 0);
|
|
|
- } else if (modeController.feedback == ModeController.Feedback.HapticFeedback)
|
|
|
+ }
|
|
|
+ else if (modeController.feedback == ModeController.Feedback.HapticFeedback)
|
|
|
{
|
|
|
// TODO: Add haptic feedback need to test
|
|
|
if (jt == Kinect.JointType.WristLeft)
|
|
|
{
|
|
|
Debug.Log("WristLeft vibrate");
|
|
|
SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.LeftHand].Execute(0, 0.01f, 10, 1);
|
|
|
- } else if (jt == Kinect.JointType.WristRight)
|
|
|
+ }
|
|
|
+ else if (jt == Kinect.JointType.WristRight)
|
|
|
{
|
|
|
Debug.Log("WristRight vibrate");
|
|
|
SteamVR_Actions.default_Haptic[SteamVR_Input_Sources.RightHand].Execute(0, 0.01f, 10, 1);
|
|
@@ -230,7 +243,8 @@ public class BodySourceView : MonoBehaviour
|
|
|
&& jt != Kinect.JointType.HandTipLeft && jt != Kinect.JointType.HandTipRight) // Do not make LineRenderer for these joints
|
|
|
{
|
|
|
lr.SetPosition(0, jointObj.localPosition);
|
|
|
- lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value));
|
|
|
+ //lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value));
|
|
|
+ lr.SetPosition(1, rescaledJoints[(int)_BoneMap[jt]]);
|
|
|
|
|
|
// Coloring the line renderer
|
|
|
//lr.SetColors(GetColorForState(sourceJoint.TrackingState), GetColorForState(targetJoint.Value.TrackingState));
|
|
@@ -296,16 +310,7 @@ public class BodySourceView : MonoBehaviour
|
|
|
{
|
|
|
//return new Vector3(joint.Position.X * -10, joint.Position.Y * 10, joint.Position.Z * 10);
|
|
|
|
|
|
- // TODO: problem with scaling
|
|
|
- if (joint.JointType == Kinect.JointType.ShoulderLeft)
|
|
|
- {
|
|
|
- return new Vector3((joint.Position.X + scale) * -1 - 0.01f, joint.Position.Y + scale, joint.Position.Z + scale);
|
|
|
- } else if (joint.JointType == Kinect.JointType.ShoulderRight)
|
|
|
- {
|
|
|
- return new Vector3((joint.Position.X + scale) * -1 + 0.01f, joint.Position.Y + scale, joint.Position.Z + scale);
|
|
|
- }
|
|
|
-
|
|
|
- return new Vector3((joint.Position.X + scale) * -1, joint.Position.Y + scale, joint.Position.Z + scale);
|
|
|
+ return new Vector3(joint.Position.X * -1, joint.Position.Y, joint.Position.Z);
|
|
|
}
|
|
|
|
|
|
private Quaternion ConvertKinectOrientationToUnity(Kinect.Vector4 orientation)
|
|
@@ -317,4 +322,61 @@ public class BodySourceView : MonoBehaviour
|
|
|
orientationUnity.w = orientation.W;
|
|
|
return orientationUnity;
|
|
|
}
|
|
|
+
|
|
|
+ // TODO: need to test
|
|
|
+ private Vector3[] RescaleJoints(Vector3[] initJoints)
|
|
|
+ {
|
|
|
+ Vector3[] rescaledJoints = new Vector3[25];
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.FootLeft] = initJoints[(int)Kinect.JointType.FootLeft];
|
|
|
+ rescaledJoints[(int)Kinect.JointType.FootRight] = initJoints[(int)Kinect.JointType.FootRight];
|
|
|
+ rescaledJoints[(int)Kinect.JointType.AnkleLeft] = initJoints[(int)Kinect.JointType.AnkleLeft];
|
|
|
+ rescaledJoints[(int)Kinect.JointType.AnkleRight] = initJoints[(int)Kinect.JointType.AnkleRight];
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.KneeLeft] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.AnkleLeft], initJoints[(int)Kinect.JointType.KneeLeft], 0.4f);
|
|
|
+ rescaledJoints[(int)Kinect.JointType.KneeRight] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.AnkleRight], initJoints[(int)Kinect.JointType.KneeRight], 0.4f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.HipLeft] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.KneeLeft], initJoints[(int)Kinect.JointType.HipLeft], 0.25f);
|
|
|
+ rescaledJoints[(int)Kinect.JointType.HipRight] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.KneeRight], initJoints[(int)Kinect.JointType.HipRight], 0.25f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.SpineBase] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.HipLeft], initJoints[(int)Kinect.JointType.SpineBase], 0.08f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.SpineMid] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.SpineBase], initJoints[(int)Kinect.JointType.SpineMid], 0.3f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.SpineShoulder] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.SpineMid], initJoints[(int)Kinect.JointType.SpineShoulder], 0.2f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.ShoulderLeft] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.ShoulderLeft], 0.15f);
|
|
|
+ rescaledJoints[(int)Kinect.JointType.ShoulderRight] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.ShoulderRight], 0.15f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.ElbowLeft] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.ShoulderLeft], initJoints[(int)Kinect.JointType.ElbowLeft], 0.25f);
|
|
|
+ rescaledJoints[(int)Kinect.JointType.ElbowRight] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.ShoulderRight], initJoints[(int)Kinect.JointType.ElbowRight], 0.25f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.WristLeft] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.ElbowLeft], initJoints[(int)Kinect.JointType.WristLeft], 0.2f);
|
|
|
+ rescaledJoints[(int)Kinect.JointType.WristRight] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.ElbowRight], initJoints[(int)Kinect.JointType.WristRight], 0.2f);
|
|
|
+
|
|
|
+ rescaledJoints[(int)Kinect.JointType.Neck] = GetTargetJointWithDesiredLength(
|
|
|
+ initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.Neck], 0.07f);
|
|
|
+
|
|
|
+ return rescaledJoints;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Vector3 GetTargetJointWithDesiredLength(Vector3 source, Vector3 target, float desiredLength)
|
|
|
+ {
|
|
|
+ Vector3 sourceToTarget = target - source;
|
|
|
+ float length = sourceToTarget.magnitude;
|
|
|
+ return sourceToTarget * desiredLength / length + source;
|
|
|
+ }
|
|
|
}
|