// 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); }
// 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)); }