Ejemplo n.º 1
0
        public static MikuMikuDance.Motion.Motion2.MMDMotion2 Convert(MMDMotion input, string modelName)
        {
            MikuMikuDance.Motion.Motion2.MMDMotion2 result = new MikuMikuDance.Motion.Motion2.MMDMotion2();
            result.ModelName  = modelName;
            result.Coordinate = MikuMikuDance.Motion.CoordinateType.RightHandedCoordinate;
            //ボーンモーションデータの変換
            MMDBoneKeyFrame[] BoneFrames = MotionHelper.ImplodeBoneMotion(input.BoneFrames);
            MikuMikuDance.Motion.Motion2.MotionData[] BoneMotionData = new MikuMikuDance.Motion.Motion2.MotionData[BoneFrames.LongLength];
            for (long i = 0; i < BoneFrames.LongLength; i++)
            {
                BoneMotionData[i]          = new MikuMikuDance.Motion.Motion2.MotionData();
                BoneMotionData[i].BoneName = BoneFrames[i].BoneName;
                BoneMotionData[i].FrameNo  = BoneFrames[i].FrameNo;

                for (int j = 0; j < BoneFrames[i].Curve.Length; j++)
                {
                    BoneMotionData[i].Interpolation[0][0][j] = (byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v1.X * 128f, 0, 255);
                    BoneMotionData[i].Interpolation[0][1][j] = (byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v1.Y * 128f, 0, 255);
                    BoneMotionData[i].Interpolation[0][2][j] = (byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v2.X * 128f, 0, 255);
                    BoneMotionData[i].Interpolation[0][3][j] = (byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v2.Y * 128f, 0, 255);
                }

                BoneMotionData[i].Location[0] = (float)BoneFrames[i].Location.X;
                BoneMotionData[i].Location[1] = (float)BoneFrames[i].Location.Y;
                BoneMotionData[i].Location[2] = (float)BoneFrames[i].Location.Z;

                BoneFrames[i].Quatanion.Normalize();
                BoneMotionData[i].Quatanion[0] = (float)BoneFrames[i].Quatanion.X;
                BoneMotionData[i].Quatanion[1] = (float)BoneFrames[i].Quatanion.Y;
                BoneMotionData[i].Quatanion[2] = (float)BoneFrames[i].Quatanion.Z;
                BoneMotionData[i].Quatanion[3] = (float)BoneFrames[i].Quatanion.W;
            }
            result.Motions = BoneMotionData;
            //表情モーションの変換
            MMDFaceKeyFrame[] FaceFrames = MotionHelper.ImplodeFaceMotion(input.FaceFrames);
            MikuMikuDance.Motion.Motion2.FaceMotionData[] FaceMotionData = new MikuMikuDance.Motion.Motion2.FaceMotionData[FaceFrames.LongLength];
            for (long i = 0; i < FaceFrames.LongLength; i++)
            {
                FaceMotionData[i]          = new MikuMikuDance.Motion.Motion2.FaceMotionData();
                FaceMotionData[i].Rate     = FaceFrames[i].Rate;
                FaceMotionData[i].FaceName = FaceFrames[i].FaceName;
                FaceMotionData[i].FrameNo  = FaceFrames[i].FrameNo;
            }
            result.FaceMotions = FaceMotionData;
            //カメラモーションは無視(使わんので)
            result.CameraMotions = new MikuMikuDance.Motion.Motion2.CameraMotionData[0];
            //ライトモーションは無視(使わんので)
            result.LightMotions = new MikuMikuDance.Motion.Motion2.LightMotionData[0];

            return(result);
        }
Ejemplo n.º 2
0
        public static MikuMikuDance.Motion.Motion2.MMDMotion2 Convert(MMDMotion input, string modelName)
        {
            MikuMikuDance.Motion.Motion2.MMDMotion2 result = new MikuMikuDance.Motion.Motion2.MMDMotion2();
            result.ModelName = modelName;
            result.Coordinate = MikuMikuDance.Motion.CoordinateType.RightHandedCoordinate;
            //ボーンモーションデータの変換
            MMDBoneKeyFrame[] BoneFrames= MotionHelper.ImplodeBoneMotion(input.BoneFrames);
            MikuMikuDance.Motion.Motion2.MotionData[] BoneMotionData = new MikuMikuDance.Motion.Motion2.MotionData[BoneFrames.LongLength];
            for (long i = 0; i < BoneFrames.LongLength; i++)
            {
                BoneMotionData[i] = new MikuMikuDance.Motion.Motion2.MotionData();
                BoneMotionData[i].BoneName = BoneFrames[i].BoneName;
                BoneMotionData[i].FrameNo = BoneFrames[i].FrameNo;

                for (int j = 0; j < BoneFrames[i].Curve.Length; j++)
                {
                    BoneMotionData[i].Interpolation[0][0][j]=(byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v1.X*128f,0,255);
                    BoneMotionData[i].Interpolation[0][1][j]=(byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v1.Y*128f,0,255);
                    BoneMotionData[i].Interpolation[0][2][j]=(byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v2.X*128f,0,255);
                    BoneMotionData[i].Interpolation[0][3][j]=(byte)MathHelper.Clamp(BoneFrames[i].Curve[j].v2.Y*128f,0,255);
                }

                BoneMotionData[i].Location[0] = (float)BoneFrames[i].Location.X;
                BoneMotionData[i].Location[1] = (float)BoneFrames[i].Location.Y;
                BoneMotionData[i].Location[2] = (float)BoneFrames[i].Location.Z;

                BoneFrames[i].Quatanion.Normalize();
                BoneMotionData[i].Quatanion[0] = (float)BoneFrames[i].Quatanion.X;
                BoneMotionData[i].Quatanion[1] = (float)BoneFrames[i].Quatanion.Y;
                BoneMotionData[i].Quatanion[2] = (float)BoneFrames[i].Quatanion.Z;
                BoneMotionData[i].Quatanion[3] = (float)BoneFrames[i].Quatanion.W;
            }
            result.Motions = BoneMotionData;
            //表情モーションの変換
            MMDFaceKeyFrame[] FaceFrames = MotionHelper.ImplodeFaceMotion(input.FaceFrames);
            MikuMikuDance.Motion.Motion2.FaceMotionData[] FaceMotionData = new MikuMikuDance.Motion.Motion2.FaceMotionData[FaceFrames.LongLength];
            for (long i = 0; i < FaceFrames.LongLength; i++)
            {
                FaceMotionData[i] = new MikuMikuDance.Motion.Motion2.FaceMotionData();
                FaceMotionData[i].Rate = FaceFrames[i].Rate;
                FaceMotionData[i].FaceName = FaceFrames[i].FaceName;
                FaceMotionData[i].FrameNo = FaceFrames[i].FrameNo;
            }
            result.FaceMotions = FaceMotionData;
            //カメラモーションは無視(使わんので)
            result.CameraMotions = new MikuMikuDance.Motion.Motion2.CameraMotionData[0];
            //ライトモーションは無視(使わんので)
            result.LightMotions = new MikuMikuDance.Motion.Motion2.LightMotionData[0];

            return result;
        }