public void SamplingKeyFrames()
        {
            var keyFrame0 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrame1 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
            var keyFrame2 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(3.0), _random.NextQuaternionF());
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(keyFrame0);
            animation.KeyFrames.Add(keyFrame1);
            animation.KeyFrames.Add(keyFrame2);

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            // Without interpolation
            animation.EnableInterpolation = false;
            Assert.AreEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.75), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.75), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.0), defaultSource, defaultTarget));

            // With interpolation
            animation.EnableInterpolation = true;
            Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget)));
            var expected = InterpolationHelper.Lerp(keyFrame0.Value, keyFrame1.Value, 0.75f);

            Assert.AreEqual(expected, animation.GetValue(TimeSpan.FromSeconds(1.75), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget));
            expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.75f);
            Assert.AreEqual(expected, animation.GetValue(TimeSpan.FromSeconds(2.75), defaultSource, defaultTarget));
            Assert.AreEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.0), defaultSource, defaultTarget));
        }
        public void CyclicOffsetLoopBehavior()
        {
            var keyFrame0 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(0.0), _random.NextQuaternionF());
            var keyFrame1 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrame2 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(keyFrame0);
            animation.KeyFrames.Add(keyFrame1);
            animation.KeyFrames.Add(keyFrame2);

            var animationClip = new AnimationClip <QuaternionF> {
                Animation = animation
            };

            animationClip.LoopBehavior = LoopBehavior.CycleOffset;
            animationClip.Duration     = TimeSpan.MaxValue;
            animationClip.ClipOffset   = TimeSpan.FromSeconds(-1);

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            // Pre loop
            var cycleOffset = keyFrame2.Value * keyFrame0.Value.Inverse;
            var expected    = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.25f);

            Assert.IsTrue(QuaternionF.AreNumericallyEqual(expected, cycleOffset * animationClip.GetValue(TimeSpan.FromSeconds(0.25), defaultSource, defaultTarget)));

            // Post loop
            expected = cycleOffset * cycleOffset * InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.75f);
            Assert.IsTrue(QuaternionF.AreNumericallyEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(6.75), defaultSource, defaultTarget)));
        }
Пример #3
0
        public void CyclicLoopBehavior()
        {
            var keyFrame0 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(0.0), _random.NextQuaternionF());
              var keyFrame1 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var keyFrame2 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
              var animation = new QuaternionFKeyFrameAnimation();
              animation.KeyFrames.Add(keyFrame0);
              animation.KeyFrames.Add(keyFrame1);
              animation.KeyFrames.Add(keyFrame2);

              var animationClip = new AnimationClip<QuaternionF> { Animation = animation };
              animationClip.LoopBehavior = LoopBehavior.Cycle;
              animationClip.Duration = TimeSpan.MaxValue;
              animationClip.ClipOffset = TimeSpan.FromSeconds(-1);

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();

              // Pre loop
              var expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.25f);
              Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(0.25), defaultSource, defaultTarget));

              // Post loop
              expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.75f);
              Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(4.75), defaultSource, defaultTarget));
        }
        public void DefaultValues()
        {
            var animation = new QuaternionFKeyFrameAnimation();

            Assert.IsNotNull(animation.KeyFrames);
            Assert.IsEmpty(animation.KeyFrames);
            Assert.IsTrue(animation.EnableInterpolation);
        }
        public void EmptyAnimation()
        {
            var animation = new QuaternionFKeyFrameAnimation();

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            Assert.AreEqual(defaultSource, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget));
            Assert.AreEqual(defaultSource, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget));
        }
Пример #6
0
        public void AnimationWithOneKeyFrame()
        {
            var keyFrame = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var keyFrameAnimation = new QuaternionFKeyFrameAnimation();
              keyFrameAnimation.KeyFrames.Add(keyFrame);
              var animation = new AnimationClip<QuaternionF>();
              animation.Animation = keyFrameAnimation;
              animation.Duration = TimeSpan.MaxValue;

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();
              Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget)); // Pre loop
              Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget)); // Key frame
              Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget)); // Post loop
        }
        public void AnimationWithOneKeyFrame()
        {
            var keyFrame          = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrameAnimation = new QuaternionFKeyFrameAnimation();

            keyFrameAnimation.KeyFrames.Add(keyFrame);
            var animation = new AnimationClip <QuaternionF>();

            animation.Animation = keyFrameAnimation;
            animation.Duration  = TimeSpan.MaxValue;

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget)); // Pre loop
            Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget)); // Key frame
            Assert.AreEqual(keyFrame.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget)); // Post loop
        }
Пример #8
0
        public void CyclicAnimationWithZeroLength()
        {
            var keyFrame0 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var keyFrame1 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var animation = new QuaternionFKeyFrameAnimation();
              animation.KeyFrames.Add(keyFrame0);
              animation.KeyFrames.Add(keyFrame1);

              var animationClip = new AnimationClip<QuaternionF> { Animation = animation };
              animationClip.LoopBehavior = LoopBehavior.Cycle;
              animationClip.Duration = TimeSpan.MaxValue;

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();

              // Just ensure that calls don't crash. (Ignore actual result because ambiguous.)
              Assert.That(() => { animationClip.GetValue(TimeSpan.FromSeconds(0.25), defaultSource, defaultTarget); }, Throws.Nothing);
              Assert.That(() => { animationClip.GetValue(TimeSpan.FromSeconds(4.75), defaultSource, defaultTarget); }, Throws.Nothing);
        }
        public void ShouldReturnTheFirstOrLastKeyFrame()
        {
            var keyFrame0 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrame1 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
            var keyFrame2 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(3.0), _random.NextQuaternionF());
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(keyFrame0);
            animation.KeyFrames.Add(keyFrame1);
            animation.KeyFrames.Add(keyFrame2);

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            // Pre loop
            Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget)));

            // Post loop
            Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.75), defaultSource, defaultTarget)));
        }
Пример #10
0
        public void OscillateLoopBehavior()
        {
            var keyFrame0 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrame1 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
            var keyFrame2 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(3.0), _random.NextQuaternionF());
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(keyFrame0);
            animation.KeyFrames.Add(keyFrame1);
            animation.KeyFrames.Add(keyFrame2);

            var animationClip = new AnimationClip <QuaternionF> {
                Animation = animation
            };

            animationClip.LoopBehavior = LoopBehavior.Oscillate;
            animationClip.Duration     = TimeSpan.MaxValue;
            animationClip.ClipStart    = TimeSpan.FromSeconds(1.0);
            animationClip.ClipEnd      = TimeSpan.FromSeconds(3.0);
            animationClip.ClipOffset   = TimeSpan.FromSeconds(-11.0);

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            // Pre loop
            var expected = InterpolationHelper.Lerp(keyFrame0.Value, keyFrame1.Value, 0.75f);

            Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(10.25), defaultSource, defaultTarget));

            expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.25f);
            Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(8.25), defaultSource, defaultTarget));

            // Post loop
            expected = InterpolationHelper.Lerp(keyFrame0.Value, keyFrame1.Value, 0.25f);
            Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(14.75), defaultSource, defaultTarget));

            expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.75f);
            Assert.AreEqual(expected, animationClip.GetValue(TimeSpan.FromSeconds(16.75), defaultSource, defaultTarget));
        }
Пример #11
0
        public void Sorting()
        {
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(new KeyFrame <QuaternionF> {
                Time = TimeSpan.FromSeconds(2)
            });
            animation.KeyFrames.Add(new KeyFrame <QuaternionF> {
                Time = TimeSpan.FromSeconds(-1)
            });
            animation.KeyFrames.Add(new KeyFrame <QuaternionF> {
                Time = TimeSpan.FromSeconds(0)
            });
            animation.KeyFrames.Add(new KeyFrame <QuaternionF> {
                Time = TimeSpan.FromSeconds(4)
            });
            animation.KeyFrames.Sort();

            Assert.AreEqual(TimeSpan.FromSeconds(-1), animation.KeyFrames[0].Time);
            Assert.AreEqual(TimeSpan.FromSeconds(0), animation.KeyFrames[1].Time);
            Assert.AreEqual(TimeSpan.FromSeconds(2), animation.KeyFrames[2].Time);
            Assert.AreEqual(TimeSpan.FromSeconds(4), animation.KeyFrames[3].Time);
        }
Пример #12
0
        public void CyclicAnimationWithZeroLength()
        {
            var keyFrame0 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var keyFrame1 = new KeyFrame <QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
            var animation = new QuaternionFKeyFrameAnimation();

            animation.KeyFrames.Add(keyFrame0);
            animation.KeyFrames.Add(keyFrame1);

            var animationClip = new AnimationClip <QuaternionF> {
                Animation = animation
            };

            animationClip.LoopBehavior = LoopBehavior.Cycle;
            animationClip.Duration     = TimeSpan.MaxValue;

            var defaultSource = _random.NextQuaternionF();
            var defaultTarget = _random.NextQuaternionF();

            // Just ensure that calls don't crash. (Ignore actual result because ambiguous.)
            Assert.That(() => { animationClip.GetValue(TimeSpan.FromSeconds(0.25), defaultSource, defaultTarget); }, Throws.Nothing);
            Assert.That(() => { animationClip.GetValue(TimeSpan.FromSeconds(4.75), defaultSource, defaultTarget); }, Throws.Nothing);
        }
Пример #13
0
        public void EmptyAnimation()
        {
            var animation = new QuaternionFKeyFrameAnimation();

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();

              Assert.AreEqual(defaultSource, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget));
              Assert.AreEqual(defaultSource, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget));
        }
Пример #14
0
        public void SamplingKeyFrames()
        {
            var keyFrame0 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var keyFrame1 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
              var keyFrame2 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(3.0), _random.NextQuaternionF());
              var animation = new QuaternionFKeyFrameAnimation();
              animation.KeyFrames.Add(keyFrame0);
              animation.KeyFrames.Add(keyFrame1);
              animation.KeyFrames.Add(keyFrame2);

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();

              // Without interpolation
              animation.EnableInterpolation = false;
              Assert.AreEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.75), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.75), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.0), defaultSource, defaultTarget));

              // With interpolation
              animation.EnableInterpolation = true;
              Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(1.0), defaultSource, defaultTarget)));
              var expected = InterpolationHelper.Lerp(keyFrame0.Value, keyFrame1.Value, 0.75f);
              Assert.AreEqual(expected, animation.GetValue(TimeSpan.FromSeconds(1.75), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame1.Value, animation.GetValue(TimeSpan.FromSeconds(2.0), defaultSource, defaultTarget));
              expected = InterpolationHelper.Lerp(keyFrame1.Value, keyFrame2.Value, 0.75f);
              Assert.AreEqual(expected, animation.GetValue(TimeSpan.FromSeconds(2.75), defaultSource, defaultTarget));
              Assert.AreEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.0), defaultSource, defaultTarget));
        }
Пример #15
0
        public void ShouldReturnTheFirstOrLastKeyFrame()
        {
            var keyFrame0 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(1.0), _random.NextQuaternionF());
              var keyFrame1 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(2.0), _random.NextQuaternionF());
              var keyFrame2 = new KeyFrame<QuaternionF>(TimeSpan.FromSeconds(3.0), _random.NextQuaternionF());
              var animation = new QuaternionFKeyFrameAnimation();
              animation.KeyFrames.Add(keyFrame0);
              animation.KeyFrames.Add(keyFrame1);
              animation.KeyFrames.Add(keyFrame2);

              var defaultSource = _random.NextQuaternionF();
              var defaultTarget = _random.NextQuaternionF();

              // Pre loop
              Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame0.Value, animation.GetValue(TimeSpan.FromSeconds(0.0), defaultSource, defaultTarget)));

              // Post loop
              Assert.IsTrue(QuaternionF.AreNumericallyEqual(keyFrame2.Value, animation.GetValue(TimeSpan.FromSeconds(3.75), defaultSource, defaultTarget)));
        }
Пример #16
0
 public void DefaultValues()
 {
     var animation = new QuaternionFKeyFrameAnimation();
       Assert.IsNotNull(animation.KeyFrames);
       Assert.IsEmpty(animation.KeyFrames);
       Assert.IsTrue(animation.EnableInterpolation);
 }
Пример #17
0
        public void Sorting()
        {
            var animation = new QuaternionFKeyFrameAnimation();
              animation.KeyFrames.Add(new KeyFrame<QuaternionF> { Time = TimeSpan.FromSeconds(2) });
              animation.KeyFrames.Add(new KeyFrame<QuaternionF> { Time = TimeSpan.FromSeconds(-1) });
              animation.KeyFrames.Add(new KeyFrame<QuaternionF> { Time = TimeSpan.FromSeconds(0) });
              animation.KeyFrames.Add(new KeyFrame<QuaternionF> { Time = TimeSpan.FromSeconds(4) });
              animation.KeyFrames.Sort();

              Assert.AreEqual(TimeSpan.FromSeconds(-1), animation.KeyFrames[0].Time);
              Assert.AreEqual(TimeSpan.FromSeconds(0), animation.KeyFrames[1].Time);
              Assert.AreEqual(TimeSpan.FromSeconds(2), animation.KeyFrames[2].Time);
              Assert.AreEqual(TimeSpan.FromSeconds(4), animation.KeyFrames[3].Time);
        }
        public void TraitsTest()
        {
            var animationEx = new QuaternionFKeyFrameAnimation();

            Assert.AreEqual(QuaternionFTraits.Instance, animationEx.Traits);
        }
Пример #19
0
 public void TraitsTest()
 {
     var animationEx = new QuaternionFKeyFrameAnimation();
       Assert.AreEqual(QuaternionFTraits.Instance, animationEx.Traits);
 }