public void TestPlayAnimation()
        {
            var controller = new AnimationControllerSkeleton(null);

            Skeleton skeleton;

            TheWizards.Animation.Animation animation;
            CreateTestAnimation(out skeleton, out animation);

            controller.SetAnimation(0, animation);

            var p = new Vector3(4, 5, 4);

            var m1 = Matrix.RotationAxis(Vector3.Normalize(new Vector3(-1, 4, 3)), 4) * Matrix.Translation(p);
            var m2 = Matrix.RotationAxis(Vector3.Normalize(new Vector3(3, 2, 8)), 4) * Matrix.Translation(p);

            var game       = new DX11Game();
            var visualizer = new SkeletonVisualizer();

            game.GameLoopEvent += delegate
            {
                controller.ProgressTime(game.Elapsed);
                controller.UpdateSkeleton();
                skeleton.UpdateAbsoluteMatrices();
                visualizer.VisualizeSkeleton(game, skeleton);
            };

            game.Run();
        }
        public void TestInterpolateBoneRelativeMatrices()
        {
            var controller = new AnimationControllerSkeleton(null);

            var p = new Vector3(4, 5, 4);

            var m1 = Matrix.RotationAxis(Vector3.Normalize(new Vector3(-1, 4, 3)), 4) * Matrix.Translation(p);
            var m2 = Matrix.RotationAxis(Vector3.Normalize(new Vector3(3, 2, 8)), 4) * Matrix.Translation(p);

            var game = new DX11Game();

            var   factor = 0f;
            float dir    = 1;

            game.GameLoopEvent += delegate
            {
                factor += game.Elapsed * dir;
                if (factor > 1)
                {
                    dir = -1;
                }
                if (factor < 0)
                {
                    dir = 1;
                }

                var m = controller.InterpolateBoneRelativeMatrices(m1, m2, factor);

                game.LineManager3D.DrawGroundShadows = true;

                game.LineManager3D.AddLine(p, Vector3.TransformCoordinate(MathHelper.Up * 5, m1),
                                           Color.Red);
                game.LineManager3D.AddLine(p, Vector3.TransformCoordinate(MathHelper.Up * 5, m2),
                                           Color.Green);
                game.LineManager3D.AddLine(p, Vector3.TransformCoordinate(MathHelper.Up * 5, m),
                                           Color.Yellow);
            };
            game.Run();
        }