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); }
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; }