Exemplo n.º 1
0
        private static Keyframe <float>[][] ReadKeyframes_(
            bool isDck,
            IDcxAnimationData animationData,
            IDcxAxes axes,
            float[] values)
        {
            var frames = new Keyframe <float> [3][];

            for (var i = 0; i < 3; ++i)
            {
                var axis = axes.Axes[i];

                var frameCount  = axis.FrameCount;
                var frameOffset = axis.FrameOffset;

                var sparse = isDck && frameCount != 1 && frameCount != animationData.FrameCount;
                frames[i] = !sparse
                        ? DcxHelpers.ReadDenseFrames(
                    values,
                    frameOffset,
                    frameCount)
                        : DcxHelpers.ReadSparseFrames(
                    values,
                    frameOffset,
                    frameCount);
            }
            return(frames);
        }
Exemplo n.º 2
0
        public static IAnimation AddAnimation(
            IBone[] bones,
            IAnimationManager animationManager,
            IDcx dcx)
        {
            var isDck            = dcx is Dck;
            var dcxAnimationData = dcx.AnimationData;

            var animation = animationManager.AddAnimation();

            animation.Name       = dcx.Name;
            animation.FrameCount = (int)dcxAnimationData.FrameCount;
            animation.FrameRate  = 30;

            foreach (var jointData in dcxAnimationData.JointDataList)
            {
                var jointIndex = jointData.JointIndex;

                var jointKeyframes = animation.AddBoneTracks(bones[jointIndex]);

                Keyframe <float>[][] frames;

                frames = DcxHelpers.ReadKeyframes_(
                    isDck,
                    dcxAnimationData,
                    jointData.ScaleAxes,
                    dcxAnimationData.ScaleValues);
                DcxHelpers.MergeKeyframesToScaleTrack(
                    frames,
                    jointKeyframes.Scales);

                frames = DcxHelpers.ReadKeyframes_(
                    isDck,
                    dcxAnimationData,
                    jointData.RotationAxes,
                    dcxAnimationData.RotationValues);
                DcxHelpers.MergeKeyframesToRotationTrack(
                    frames,
                    jointKeyframes.Rotations);

                frames = DcxHelpers.ReadKeyframes_(
                    isDck,
                    dcxAnimationData,
                    jointData.PositionAxes,
                    dcxAnimationData.PositionValues);
                DcxHelpers.MergeKeyframesToPositionTrack(
                    frames,
                    jointKeyframes.Positions);

                animation.AddBoneTracks(bones[jointIndex]).Set(jointKeyframes);
            }

            return(animation);
        }