示例#1
0
        private static void CalibrateLeg(Settings settings, Transform tracker, IKSolverVR.Leg leg, Transform lastBone, Vector3 rootForward, bool isLeft)
        {
            string    name   = isLeft ? "Left" : "Right";
            Transform target = leg.target == null ? (new GameObject(name + " Foot Target")).transform : leg.target;

            // Space of the tracker heading
            Quaternion trackerSpace = tracker.rotation * Quaternion.LookRotation(settings.footTrackerForward, settings.footTrackerUp);
            Vector3    f            = trackerSpace * Vector3.forward;

            f.y          = 0f;
            trackerSpace = Quaternion.LookRotation(f);

            // Target position
            float inwardOffset = isLeft ? settings.footInwardOffset : -settings.footInwardOffset;

            target.position = tracker.position + trackerSpace * new Vector3(inwardOffset, 0f, settings.footForwardOffset);
            target.position = new Vector3(target.position.x, lastBone.position.y, target.position.z);

            // Target rotation
            target.rotation = lastBone.rotation;

            // Rotate target forward towards tracker forward
            Vector3 footForward = AxisTools.GetAxisVectorToDirection(lastBone, rootForward);

            if (Vector3.Dot(lastBone.rotation * footForward, rootForward) < 0f)
            {
                footForward = -footForward;
            }
            Vector3 fLocal        = Quaternion.Inverse(Quaternion.LookRotation(target.rotation * footForward)) * f;
            float   angle         = Mathf.Atan2(fLocal.x, fLocal.z) * Mathf.Rad2Deg;
            float   headingOffset = isLeft ? settings.footHeadingOffset : -settings.footHeadingOffset;

            target.rotation = Quaternion.AngleAxis(angle + headingOffset, Vector3.up) * target.rotation;

            target.parent = tracker;
            leg.target    = target;

            leg.positionWeight = 1f;
            leg.rotationWeight = 1f;

            // Bend goal
            Transform bendGoal = leg.bendGoal == null ? (new GameObject(name + " Leg Bend Goal")).transform : leg.bendGoal;

            bendGoal.position  = lastBone.position + trackerSpace * Vector3.forward + trackerSpace * Vector3.up;// * 0.5f;
            bendGoal.parent    = tracker;
            leg.bendGoal       = bendGoal;
            leg.bendGoalWeight = 1f;
        }
示例#2
0
        private static void CalibrateLeg(CalibrationData data, Transform tracker, IKSolverVR.Leg leg, Transform lastBone, Vector3 rootForward, bool isLeft)
        {
            if (isLeft && data.leftFoot == null)
            {
                return;
            }
            if (!isLeft && data.rightFoot == null)
            {
                return;
            }

            string    name   = isLeft ? "Left" : "Right";
            Transform target = leg.target == null ? (new GameObject(name + " Foot Target")).transform : leg.target;

            target.parent = tracker;

            if (isLeft)
            {
                data.leftFoot.SetTo(target);
            }
            else
            {
                data.rightFoot.SetTo(target);
            }

            leg.target = target;

            leg.positionWeight = 1f;
            leg.rotationWeight = 1f;

            // Bend goal
            Transform bendGoal = leg.bendGoal == null ? (new GameObject(name + " Leg Bend Goal")).transform : leg.bendGoal;

            bendGoal.parent = tracker;

            if (isLeft)
            {
                data.leftLegGoal.SetTo(bendGoal);
            }
            else
            {
                data.rightLegGoal.SetTo(bendGoal);
            }

            leg.bendGoal       = bendGoal;
            leg.bendGoalWeight = 1f;
        }
示例#3
0
        }                                                                                                                                                                                                                                                                  // 0x00000001807D6FA0-0x00000001807D8960

        private static void CalibrateLeg(Settings settings, Transform tracker, IKSolverVR.Leg leg, Transform lastBone, Vector3 rootForward, bool isLeft)
        {
        }                                                                                                                                                           // 0x00000001807D65D0-0x00000001807D6FA0