HelperScript.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Kinect = Windows.Kinect;
  5. public static class HelperScript
  6. {
  7. public static Dictionary<Kinect.JointType, Kinect.JointType> _BoneMap = new Dictionary<Kinect.JointType, Kinect.JointType>()
  8. {
  9. { Kinect.JointType.FootLeft, Kinect.JointType.AnkleLeft },
  10. { Kinect.JointType.AnkleLeft, Kinect.JointType.KneeLeft },
  11. { Kinect.JointType.KneeLeft, Kinect.JointType.HipLeft },
  12. { Kinect.JointType.HipLeft, Kinect.JointType.SpineBase },
  13. { Kinect.JointType.FootRight, Kinect.JointType.AnkleRight },
  14. { Kinect.JointType.AnkleRight, Kinect.JointType.KneeRight },
  15. { Kinect.JointType.KneeRight, Kinect.JointType.HipRight },
  16. { Kinect.JointType.HipRight, Kinect.JointType.SpineBase },
  17. { Kinect.JointType.HandTipLeft, Kinect.JointType.HandLeft },
  18. { Kinect.JointType.ThumbLeft, Kinect.JointType.HandLeft },
  19. { Kinect.JointType.HandLeft, Kinect.JointType.WristLeft },
  20. { Kinect.JointType.WristLeft, Kinect.JointType.ElbowLeft },
  21. { Kinect.JointType.ElbowLeft, Kinect.JointType.ShoulderLeft },
  22. { Kinect.JointType.ShoulderLeft, Kinect.JointType.SpineShoulder },
  23. { Kinect.JointType.HandTipRight, Kinect.JointType.HandRight },
  24. { Kinect.JointType.ThumbRight, Kinect.JointType.HandRight },
  25. { Kinect.JointType.HandRight, Kinect.JointType.WristRight },
  26. { Kinect.JointType.WristRight, Kinect.JointType.ElbowRight },
  27. { Kinect.JointType.ElbowRight, Kinect.JointType.ShoulderRight },
  28. { Kinect.JointType.ShoulderRight, Kinect.JointType.SpineShoulder },
  29. { Kinect.JointType.SpineBase, Kinect.JointType.SpineMid },
  30. { Kinect.JointType.SpineMid, Kinect.JointType.SpineShoulder },
  31. { Kinect.JointType.SpineShoulder, Kinect.JointType.Neck },
  32. { Kinect.JointType.Neck, Kinect.JointType.Head },
  33. };
  34. public static Vector3[] ConvertJointsDataToVector3Array(JointsData jd)
  35. {
  36. Vector3[] joints = new Vector3[jd.jointsPositionsX.Count];
  37. for (int i = 0; i < joints.Length; i++)
  38. {
  39. joints[i] = new Vector3(jd.jointsPositionsX[i], jd.jointsPositionsY[i], jd.jointsPositionsZ[i]);
  40. }
  41. return joints;
  42. }
  43. public static Vector3[] RescaleJoints(Vector3[] initJoints)
  44. {
  45. Vector3[] rescaledJoints = new Vector3[25];
  46. rescaledJoints[(int)Kinect.JointType.SpineBase] = Vector3.zero;
  47. // Lower part
  48. rescaledJoints[(int)Kinect.JointType.HipLeft] = GetTargetJointWithDesiredLength(
  49. initJoints[(int)Kinect.JointType.SpineBase], initJoints[(int)Kinect.JointType.HipLeft], 0.08f) + rescaledJoints[(int)Kinect.JointType.SpineBase];
  50. rescaledJoints[(int)Kinect.JointType.HipRight] = GetTargetJointWithDesiredLength(
  51. initJoints[(int)Kinect.JointType.SpineBase], initJoints[(int)Kinect.JointType.HipRight], 0.08f) + rescaledJoints[(int)Kinect.JointType.SpineBase];
  52. rescaledJoints[(int)Kinect.JointType.KneeLeft] = GetTargetJointWithDesiredLength(
  53. initJoints[(int)Kinect.JointType.HipLeft], initJoints[(int)Kinect.JointType.KneeLeft], 0.38f) + rescaledJoints[(int)Kinect.JointType.HipLeft];
  54. rescaledJoints[(int)Kinect.JointType.KneeRight] = GetTargetJointWithDesiredLength(
  55. initJoints[(int)Kinect.JointType.HipRight], initJoints[(int)Kinect.JointType.KneeRight], 0.38f) + rescaledJoints[(int)Kinect.JointType.HipRight];
  56. rescaledJoints[(int)Kinect.JointType.AnkleLeft] = GetTargetJointWithDesiredLength(
  57. initJoints[(int)Kinect.JointType.KneeLeft], initJoints[(int)Kinect.JointType.AnkleLeft], 0.35f) + rescaledJoints[(int)Kinect.JointType.KneeLeft];
  58. rescaledJoints[(int)Kinect.JointType.AnkleRight] = GetTargetJointWithDesiredLength(
  59. initJoints[(int)Kinect.JointType.KneeRight], initJoints[(int)Kinect.JointType.AnkleRight], 0.35f) + rescaledJoints[(int)Kinect.JointType.KneeRight];
  60. rescaledJoints[(int)Kinect.JointType.FootLeft] = GetTargetJointWithDesiredLength(
  61. initJoints[(int)Kinect.JointType.AnkleLeft], initJoints[(int)Kinect.JointType.FootLeft], 0.1f) + rescaledJoints[(int)Kinect.JointType.AnkleLeft] + new Vector3(0, 0.03f, 0);
  62. //initJoints[(int)Kinect.JointType.AnkleLeft], initJoints[(int)Kinect.JointType.FootLeft], 0.1f) + rescaledJoints[(int)Kinect.JointType.AnkleLeft];
  63. rescaledJoints[(int)Kinect.JointType.FootRight] = GetTargetJointWithDesiredLength(
  64. initJoints[(int)Kinect.JointType.AnkleRight], initJoints[(int)Kinect.JointType.FootRight], 0.1f) + rescaledJoints[(int)Kinect.JointType.AnkleRight] + new Vector3(0, 0.03f, 0);
  65. //initJoints[(int)Kinect.JointType.AnkleRight], initJoints[(int)Kinect.JointType.FootRight], 0.1f) + rescaledJoints[(int)Kinect.JointType.AnkleRight];
  66. // Upper part
  67. rescaledJoints[(int)Kinect.JointType.SpineMid] = GetTargetJointWithDesiredLength(
  68. initJoints[(int)Kinect.JointType.SpineBase], initJoints[(int)Kinect.JointType.SpineMid], 0.2f) + rescaledJoints[(int)Kinect.JointType.SpineBase];
  69. rescaledJoints[(int)Kinect.JointType.SpineShoulder] = GetTargetJointWithDesiredLength(
  70. initJoints[(int)Kinect.JointType.SpineMid], initJoints[(int)Kinect.JointType.SpineShoulder], 0.2f) + rescaledJoints[(int)Kinect.JointType.SpineMid];
  71. rescaledJoints[(int)Kinect.JointType.ShoulderLeft] = GetTargetJointWithDesiredLength(
  72. initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.ShoulderLeft], 0.12f) + rescaledJoints[(int)Kinect.JointType.SpineShoulder];
  73. rescaledJoints[(int)Kinect.JointType.ShoulderRight] = GetTargetJointWithDesiredLength(
  74. initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.ShoulderRight], 0.12f) + rescaledJoints[(int)Kinect.JointType.SpineShoulder];
  75. rescaledJoints[(int)Kinect.JointType.ElbowLeft] = GetTargetJointWithDesiredLength(
  76. initJoints[(int)Kinect.JointType.ShoulderLeft], initJoints[(int)Kinect.JointType.ElbowLeft], 0.28f) + rescaledJoints[(int)Kinect.JointType.ShoulderLeft];
  77. rescaledJoints[(int)Kinect.JointType.ElbowRight] = GetTargetJointWithDesiredLength(
  78. initJoints[(int)Kinect.JointType.ShoulderRight], initJoints[(int)Kinect.JointType.ElbowRight], 0.28f) + rescaledJoints[(int)Kinect.JointType.ShoulderRight];
  79. rescaledJoints[(int)Kinect.JointType.WristLeft] = GetTargetJointWithDesiredLength(
  80. initJoints[(int)Kinect.JointType.ElbowLeft], initJoints[(int)Kinect.JointType.WristLeft], 0.28f) + rescaledJoints[(int)Kinect.JointType.ElbowLeft];
  81. rescaledJoints[(int)Kinect.JointType.WristRight] = GetTargetJointWithDesiredLength(
  82. initJoints[(int)Kinect.JointType.ElbowRight], initJoints[(int)Kinect.JointType.WristRight], 0.28f) + rescaledJoints[(int)Kinect.JointType.ElbowRight];
  83. rescaledJoints[(int)Kinect.JointType.Neck] = GetTargetJointWithDesiredLength(
  84. initJoints[(int)Kinect.JointType.SpineShoulder], initJoints[(int)Kinect.JointType.Neck], 0.1f) + rescaledJoints[(int)Kinect.JointType.SpineShoulder];
  85. return rescaledJoints;
  86. }
  87. private static Vector3 GetTargetJointWithDesiredLength(Vector3 source, Vector3 target, float desiredLength)
  88. {
  89. Vector3 sourceToTarget = target - source;
  90. float length = sourceToTarget.magnitude;
  91. return sourceToTarget * desiredLength / length;
  92. }
  93. }