Пример #1
0
        protected virtual void UpdateFingerSeparation(QuickHumanFingers f, QuickFingerPose fPose, FingerBones fBones)
        {
            Vector3 rotAxis  = fBones.GetRotAxisSeparate();
            float   t        = (fPose._separation + 1) / 2.0f;
            float   maxAngle = GetMaxAngleSeparation(f);
            float   rotAngle = Mathf.Lerp(-maxAngle, maxAngle, t);

            fBones[0].Rotate(rotAxis, rotAngle, Space.Self);
        }
Пример #2
0
        protected virtual void UpdateFingerClose(QuickHumanFingers f, QuickFingerPose fPose, FingerBones fBones)
        {
            Vector3 rotAxis = fBones.GetRotAxisClose();

            GetAngleLimitsClose(f, out float minAngle, out float maxAngle);

            for (int i = 0; i < 3; i++)
            {
                float rotAngle = Mathf.Lerp(minAngle, maxAngle, fPose.GetCloseFactor(i));
                fBones[i].Rotate(rotAxis, rotAngle, Space.Self);
            }
        }
Пример #3
0
 protected virtual void GetAngleLimitsClose(QuickHumanFingers finger, out float min, out float max)
 {
     if (finger == QuickHumanFingers.Thumb)
     {
         min = -45;
         max = 45;
     }
     else
     {
         min = 0;
         max = 90;
     }
 }
Пример #4
0
        protected virtual void UpdateFingers()
        {
            for (int i = 0; i < 5; i++)
            {
                QuickHumanFingers f      = _humanFingers[i];
                FingerBones       fBones = _fingerBoneTransforms[f];
                QuickFingerPose   fPose  = new QuickFingerPose();

                //Close factor
                for (int j = 0; j < 3; j++)
                {
                    if (i == 0 && _blendThumbUp > 0)
                    {
                        fPose.SetCloseFactor(j, Mathf.Lerp(_handPoseNeutral[i].GetCloseFactor(j), _handPoseThumbUp[i].GetCloseFactor(j), _blendThumbUp));
                    }
                    else if (i == 1 && _blendPoint > 0)
                    {
                        fPose.SetCloseFactor(j, Mathf.Lerp(_handPoseNeutral[i].GetCloseFactor(j), 0, _blendPoint));
                    }
                    else
                    {
                        fPose.SetCloseFactor(j, Mathf.Lerp(_handPoseNeutral[i].GetCloseFactor(j), _handPoseClosed[i].GetCloseFactor(j), _closeFactor));
                    }
                }

                //Separation factor
                if (i == 0 && _blendThumbUp > 0)
                {
                    fPose._separation = Mathf.Lerp(_handPoseNeutral[i]._separation, _handPoseThumbUp[i]._separation, _blendThumbUp);
                }
                else
                {
                    fPose._separation = Mathf.Lerp(_handPoseNeutral[i]._separation, _handPoseClosed[i]._separation, _closeFactor);
                }

                if (fBones.CheckTransforms())
                {
                    ResetFingerRotation(fBones);
                    UpdateFingerClose(f, fPose, fBones);
                    UpdateFingerSeparation(f, fPose, fBones);
                }
            }
        }
Пример #5
0
        public static List <QuickHumanBodyBones> GetBonesFromFinger(QuickHumanFingers finger, bool isLeft)
        {
            if (isLeft)
            {
                if (_bonesFromFingerLeft == null)
                {
                    _bonesFromFingerLeft = InitHumanFingers(true);
                }

                return(_bonesFromFingerLeft[finger]);
            }

            if (_bonesFromFingerRight == null)
            {
                _bonesFromFingerRight = InitHumanFingers(false);
            }

            return(_bonesFromFingerRight[finger]);
        }
Пример #6
0
        public virtual float GetFingerLength(QuickHumanFingers f, bool isLeft)
        {
            List <QuickHumanBodyBones> boneFingers = QuickHumanTrait.GetBonesFromFinger(f, isLeft);
            HumanBodyBones             boneID      = (HumanBodyBones)boneFingers[0];

            if (_fingerLength[boneID] == 0)
            {
                QuickVRNode n0 = GetVRNode(boneFingers[0]);
                QuickVRNode n1 = GetVRNode(boneFingers[1]);
                QuickVRNode n2 = GetVRNode(boneFingers[2]);

                if (n0.IsTracked() && n1.IsTracked() && n2.IsTracked())
                {
                    _fingerLength[boneID] = Vector3.Distance(n0.transform.position, n1.transform.position) + Vector3.Distance(n1.transform.position, n2.transform.position);
                }
            }

            return(_fingerLength[boneID]);
        }
Пример #7
0
 protected virtual float GetMaxAngleSeparation(QuickHumanFingers finger)
 {
     return(finger == QuickHumanFingers.Thumb ? 60.0f : 10.0f);
 }
Пример #8
0
 public virtual bool IsDataHighConfidenceFinger(QuickHumanFingers finger)
 {
     //return IsDataHighConfidence && GetFingerConfidence(_toOVRHandFinger[finger]) == TrackingConfidence.High;
     return(IsDataHighConfidence && _handFingerConfidence[(int)finger] >= NUM_FRAMES_CONFIDENCE);
 }
Пример #9
0
 protected virtual bool IsTrackedJointHandRight(QuickHumanFingers joint)
 {
     return(IsTrackedJoint(_trackedJointsHandRight, (int)joint));
 }
Пример #10
0
 public virtual Transform GetBoneFingerTransform(QuickHumanFingers f, int i)
 {
     return(_fingerBoneTransforms[f][i]);
 }