Beispiel #1
0
            public static AngularTransition Create(quaternion displacement, quaternion velocity, float durationInSeconds, float inverseDeltaTime)
            {
                float angle;

                var axis = Missing.axisAngle(displacement, out angle);

                if (angle < 0.0f)
                {
                    angle    = -angle;
                    axis     = -axis;
                    velocity = Missing.negate(velocity);
                }

                angle %= 2.0f * math.PI;

                var x0 = angle;

                var x1 = 2.0f * math.atan(
                    math.dot(velocity.value.xyz, axis) /
                    velocity.value.w);

                var v0 = (x0 - x1) * inverseDeltaTime;

                v0 = math.min(v0, 0.0f);

                var transition = ScalarTransition.Create(x0, v0, durationInSeconds);

                return(new AngularTransition
                {
                    t = 0.0f,
                    axis = axis,
                    transition = transition
                });
            }
Beispiel #2
0
            public static LinearTransition Create(float3 displacement, float3 velocity, float durationInSeconds, float inverseDeltaTime)
            {
                var axis = math.normalizesafe(displacement);

                var x0 = math.length(displacement);

                var x1 = math.length(math.dot(axis, velocity));

                var v0 = (x0 - x1) * inverseDeltaTime;

                v0 = math.min(v0, 0.0f);

                var transition = ScalarTransition.Create(x0, v0, durationInSeconds);

                return(new LinearTransition
                {
                    t = 0.0f,
                    axis = axis,
                    transition = transition
                });
            }