예제 #1
0
    public static animationTransformData lerp(animationTransformData pose_0, animationTransformData pose_1, float parameter, bool usingQuaternion = false)
    {
        animationTransformData poseresult = new animationTransformData();

        //translation: literal linear interpolation
        poseresult.localPosition = Vector3.Lerp(pose_0.localPosition, pose_1.localPosition, parameter);

        //scale: ditto
        poseresult.localScale = Vector3.Lerp(pose_0.localScale, pose_1.localScale, parameter);
        //rotation: slerp if quaternion (or NLERP) otherwise euler lerp
        if (usingQuaternion)
        {
            poseresult.localRotation = Quaternion.Slerp(pose_0.localRotation, pose_1.localRotation, parameter);
        }
        else
        {
            poseresult.localEulerAnglesSet(Vector3.Lerp(pose_0.localEulerAngles(), pose_1.localEulerAngles(), parameter));
        }

        return(poseresult);
    }
예제 #2
0
    public static animationTransformData add(animationTransformData pose0, animationTransformData pose1, bool usingQuaternion)
    {
        animationTransformData poseresult = new animationTransformData();

        //translation literal addition
        poseresult.localPosition = pose0.localPosition + pose1.localPosition;

        //scale component-wise multiplication
        poseresult.localScale = pose0.localScale;
        poseresult.localScale.Scale(pose1.localScale);

        //rotation: quaternioni concatenation or Euler addition
        if (usingQuaternion)
        {
            poseresult.localRotation = pose0.localRotation * pose1.localRotation;
        }
        else
        {
            poseresult.localEulerAnglesSet(pose0.localEulerAngles() + pose1.localEulerAngles());
        }

        return(poseresult);
    }