public AnimationPlayer(AnimatedModelData modelData)
        {
            this.modelData = modelData;

            bones          = new Matrix[modelData.BonesBindPose.Length];
            bonesAbsolute  = new Matrix[modelData.BonesBindPose.Length];
            bonesAnimation = new Matrix[modelData.BonesBindPose.Length];

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i] = modelData.BonesBindPose[i];
            }
        }
        internal AnimatedModel(Model model, AnimationClip[] clips, string[] clipNames)
        {
            this.model = model;

            Dictionary <string, object> tag = model.Tag as Dictionary <string, object>;

            animationData = tag["AnimatedModelData"] as AnimatedModelData;

            this.clips = new Dictionary <string, AnimationClip>();
            for (int i = 0; i < clips.Length; i++)
            {
                this.clips[clipNames[i]] = clips[i];
            }
        }
        protected override AnimatedModel Read(ContentReader input, AnimatedModel existingInstance)
        {
            Model model      = input.ReadObject <Model>();
            int   frameCount = input.ReadInt32();
            int   clipCount  = input.ReadInt32();

            Dictionary <string, object> tag           = model.Tag as Dictionary <string, object>;
            AnimatedModelData           animationData = tag["AnimatedModelData"] as AnimatedModelData;
            AnimationClip clip = animationData.Animations[0];

            AnimationClip[] clips     = new AnimationClip[clipCount];
            string[]        clipNames = new string[clipCount];

            for (int i = 0; i < clipCount; i++)
            {
                clipNames[i] = input.ReadString();

                int startFrame = input.ReadInt32();
                int endFrame   = input.ReadInt32();
                clips[i] = clip.Divide(startFrame, endFrame, frameCount);
            }

            return(new AnimatedModel(model, clips, clipNames));
        }