示例#1
0
        // master sterp function
        public static Quaternion Sterp
        (
            Quaternion a,
            Quaternion b,
            Vector3 twistAxis,
            float tSwing,
            float tTwist,
            SterpMode mode,
            out Quaternion swing,
            out Quaternion twist
        )
        {
            Quaternion q = b * Quaternion.Inverse(a);
            Quaternion swingFull;
            Quaternion twistFull;

            QuaternionUtil.DecomposeSwingTwist(q, twistAxis, out swingFull, out twistFull);

            switch (mode)
            {
            default:
            case SterpMode.Nlerp:
                swing = Nlerp(Quaternion.identity, swingFull, tSwing);
                twist = Nlerp(Quaternion.identity, twistFull, tTwist);
                break;

            case SterpMode.Slerp:
                swing = Quaternion.Slerp(Quaternion.identity, swingFull, tSwing);
                twist = Quaternion.Slerp(Quaternion.identity, twistFull, tTwist);
                break;
            }

            return(twist * swing);
        }
示例#2
0
 // same swing & twist parameters with individual interpolated swing & twist outputs
 public static Quaternion Sterp
 (
     Quaternion a,
     Quaternion b,
     Vector3 twistAxis,
     float t,
     out Quaternion swing,
     out Quaternion twist,
     SterpMode mode = SterpMode.Slerp
 )
 {
     return(Sterp(a, b, twistAxis, t, t, out swing, out twist, mode));
 }