Beispiel #1
0
 private void OnValidate()
 {
     for (int f = 0; f < fingers.Count; f++)
     {
         if (fingers[f].finger == HumanFinger.Thumb)
         {
             thumb = fingers[f];
         }
         else if (fingers[f].finger == HumanFinger.Index)
         {
             index = fingers[f];
         }
         else if (fingers[f].finger == HumanFinger.Middle)
         {
             middle = fingers[f];
         }
         else if (fingers[f].finger == HumanFinger.Ring)
         {
             ring = fingers[f];
         }
         else if (fingers[f].finger == HumanFinger.Pinky)
         {
             pinky = fingers[f];
         }
     }
 }
Beispiel #2
0
 public void FromFingerPoseToBones(FingerPose finger, List <AbstractTsf> bonesList)
 {
     // We have to copy the content as we can't overwrite the item's references. It will be merged again from the splitted bones array to InputDataProvider.bones
     for (int b = 0; b < bonesList.Count; b++)
     {
         if (b < finger.bones.Count)
         {
             AbstractTsf.Copy(finger.bones[b], bonesList[b]);
         }
         else
         {
             bonesList[b] = new AbstractTsf("Missing bone pose", Space.Self);
         }
     }
 }
Beispiel #3
0
        void UpdateFingerFromPose(int idpFirstBoneIndex, int idpFingerBonesLength, FingerPose startPose, FingerPose endPose)
        {
            int        idpFingerBoneIndex, startPoseIndex, endPoseIndex;
            Vector3    lerpedPos;
            Quaternion lerpedRot;

            for (int b = 1; b <= idpFingerBonesLength; b++)
            {
                idpFingerBoneIndex = idpFingerBonesLength - b;
                startPoseIndex     = startPose.bones.Count - b;
                endPoseIndex       = endPose.bones.Count - b;

                if (startPoseIndex >= 0 && endPoseIndex < 0)
                {
                    lerpedPos = startPose.bones[startPoseIndex].position;
                    lerpedRot = startPose.bones[startPoseIndex].rotation;
                }
                else if (startPoseIndex < 0 && endPoseIndex >= 0)
                {
                    lerpedPos = endPose.bones[endPoseIndex].position;
                    lerpedRot = endPose.bones[endPoseIndex].rotation;
                }
                else if (startPoseIndex >= 0 && endPoseIndex >= 0)
                {
                    lerpedPos = Vector3.Lerp(startPose.bones[startPoseIndex].position, endPose.bones[endPoseIndex].position, poseLerp);
                    lerpedRot = Quaternion.Lerp(startPose.bones[startPoseIndex].rotation, endPose.bones[endPoseIndex].rotation, poseLerp);
                }
                else
                {
                    lerpedPos = Vector3.zero;
                    lerpedRot = Quaternion.identity;
                }

                UpdateBone(idpFirstBoneIndex + idpFingerBoneIndex, Space.Self, lerpedRot, lerpedPos);
            }
        }
Beispiel #4
0
 void FromBonesToFingerPose(FingerPose finger, List <AbstractTsf> bonesList)
 {
     // We can overwrite the item's references. The splitted array will remain splitted in fingers
     finger.bones = bonesList;
 }