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); }
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); } }
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; } }
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); } } }
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]); }
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]); }
protected virtual float GetMaxAngleSeparation(QuickHumanFingers finger) { return(finger == QuickHumanFingers.Thumb ? 60.0f : 10.0f); }
public virtual bool IsDataHighConfidenceFinger(QuickHumanFingers finger) { //return IsDataHighConfidence && GetFingerConfidence(_toOVRHandFinger[finger]) == TrackingConfidence.High; return(IsDataHighConfidence && _handFingerConfidence[(int)finger] >= NUM_FRAMES_CONFIDENCE); }
protected virtual bool IsTrackedJointHandRight(QuickHumanFingers joint) { return(IsTrackedJoint(_trackedJointsHandRight, (int)joint)); }
public virtual Transform GetBoneFingerTransform(QuickHumanFingers f, int i) { return(_fingerBoneTransforms[f][i]); }