internal static void WriteVmdString(BinaryWriter bw, string s, int count, VmdVersion version) { var bytes = Encoding.GetBytes(s); bw.Write(bytes.Take(count - 1).ToArray()); bw.Write(Enumerable.Repeat(version == VmdVersion.MMDVer2 ? (byte)0 : (byte)0xFD, Math.Max(count - bytes.Length, 1)).Select((_, idx) => idx == 0 ? (byte)0 : _).ToArray()); }
public static VmdCameraFrame Parse(BinaryReader br, VmdVersion version) { var rt = new VmdCameraFrame { FrameTime = br.ReadUInt32(), Radius = br.ReadSingle(), Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Angle = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, }; if (version == VmdVersion.MMDVer3) { rt.XInterpolation = ReadInterpolationPair(br); rt.YInterpolation = ReadInterpolationPair(br); rt.ZInterpolation = ReadInterpolationPair(br); rt.AngleInterpolation = ReadInterpolationPair(br); rt.RadiusInterpolation = ReadInterpolationPair(br); rt.FovInterpolation = ReadInterpolationPair(br); rt.FovInDegree = br.ReadInt32(); rt.Ortho = br.ReadBoolean(); } else { rt.AngleInterpolation = ReadInterpolationPair(br); } return(rt); }
static IEnumerable <VmdCameraFrame> ReadCameraFrames(BinaryReader br, VmdVersion version) { var count = br.ReadUInt32(); for (uint i = 0; i < count; i++) { yield return(VmdCameraFrame.Parse(br, version)); } }
public void Write(BinaryWriter bw, VmdVersion version) { VmdDocument.WriteVmdString(bw, this.Name, 15, version); bw.Write(this.FrameTime); this.Position.ForEach(bw.Write); this.Quaternion.ForEach(bw.Write); var x = this.XInterpolation; var y = this.YInterpolation; var z = this.ZInterpolation; var r = this.RotationInterpolation; var X_x1 = x[0].X; var X_y1 = x[0].Y; var Y_x1 = y[0].X; var Y_y1 = y[0].Y; var Z_x1 = z[0].X; var Z_y1 = z[0].Y; var R_x1 = r[0].X; var R_y1 = r[0].Y; var X_x2 = x[1].X; var X_y2 = x[1].Y; var Y_x2 = y[1].X; var Y_y2 = y[1].Y; var Z_x2 = z[1].X; var Z_y2 = z[1].Y; var R_x2 = r[1].X; var R_y2 = r[1].Y; bw.Write(new byte[] { X_x1, Y_x1, Z_x1, R_x1, X_y1, Y_y1, Z_y1, R_y1, X_x2, Y_x2, Z_x2, R_x2, X_y2, Y_y2, Z_y2, R_y2, Y_x1, Z_x1, R_x1, X_y1, Y_y1, Z_y1, R_y1, X_x2, Y_x2, Z_x2, R_x2, X_y2, Y_y2, Z_y2, R_y2, 01, Z_x1, R_x1, X_y1, Y_y1, Z_y1, R_y1, X_x2, Y_x2, Z_x2, R_x2, X_y2, Y_y2, Z_y2, R_y2, 01, 00, R_x1, X_y1, Y_y1, Z_y1, R_y1, X_x2, Y_x2, Z_x2, R_x2, X_y2, Y_y2, Z_y2, R_y2, 01, 00, 00 }); }
public void Write(BinaryWriter bw, VmdVersion version) { bw.Write(this.FrameTime); bw.Write(this.Radius); this.Position.ForEach(bw.Write); this.Angle.ForEach(bw.Write); if (version == VmdVersion.MMDVer3) { WriteInterpolationPair(bw, this.XInterpolation); WriteInterpolationPair(bw, this.YInterpolation); WriteInterpolationPair(bw, this.ZInterpolation); WriteInterpolationPair(bw, this.AngleInterpolation); WriteInterpolationPair(bw, this.RadiusInterpolation); WriteInterpolationPair(bw, this.FovInterpolation); bw.Write(this.FovInDegree); bw.Write(this.Ortho); } else { WriteInterpolationPair(bw, this.AngleInterpolation); } }
public void Write(BinaryWriter bw, VmdVersion version) { VmdDocument.WriteVmdString(bw, this.Name, 15, version); bw.Write(this.FrameTime); bw.Write(this.Weight); }
static IEnumerable<VmdCameraFrame> ReadCameraFrames(BinaryReader br, VmdVersion version) { var count = br.ReadUInt32(); for (uint i = 0; i < count; i++) yield return VmdCameraFrame.Parse(br, version); }
public void FromBytes(byte[] bytes, int startIndex) { int num = startIndex; byte[] array = new byte[30]; Array.Copy(bytes, num, array, 0, 30); VMDHeader = BytesStringProc.GetString(array, 0); int num2 = 0; if (string.Compare(VMDHeader, "Vocaloid Motion Data file", ignoreCase: true) == 0) { ModelNameBytes = 10; num2 = 1; m_ver = VmdVersion.v1; } else { if (string.Compare(VMDHeader, "Vocaloid Motion Data 0002", ignoreCase: true) != 0) { throw new Exception("対応したVMDファイルではありません"); } ModelNameBytes = 20; num2 = 2; m_ver = VmdVersion.v2; } num += 30; _ = new byte[ModelNameBytes]; Array.Copy(bytes, num, array, 0, ModelNameBytes); ModelName = BytesStringProc.GetString(array, 0); num += ModelNameBytes; int num3 = BitConverter.ToInt32(bytes, num); num += 4; MotionList.Clear(); MotionList.Capacity = num3; for (int i = 0; i < num3; i++) { VmdMotion vmdMotion = new VmdMotion(); vmdMotion.FromBytes(bytes, num); num += vmdMotion.ByteCount; MotionList.Add(vmdMotion); } if (bytes.Length <= num) { return; } num3 = BitConverter.ToInt32(bytes, num); num += 4; MorphList.Clear(); MorphList.Capacity = num3; for (int j = 0; j < num3; j++) { VmdMorph vmdMorph = new VmdMorph(); vmdMorph.FromBytes(bytes, num); num += vmdMorph.ByteCount; MorphList.Add(vmdMorph); } if (bytes.Length <= num) { return; } num3 = BitConverter.ToInt32(bytes, num); num += 4; CameraList.Clear(); CameraList.Capacity = num3; switch (num2) { case 1: { for (int l = 0; l < num3; l++) { VmdCamera_v1 vmdCamera_v = new VmdCamera_v1(); vmdCamera_v.FromBytes(bytes, num); num += vmdCamera_v.ByteCount; CameraList.Add(vmdCamera_v.ToVmdCamera()); } break; } case 2: { for (int k = 0; k < num3; k++) { VmdCamera vmdCamera = new VmdCamera(); vmdCamera.FromBytes(bytes, num); num += vmdCamera.ByteCount; CameraList.Add(vmdCamera); } break; } } if (bytes.Length <= num) { return; } num3 = BitConverter.ToInt32(bytes, num); num += 4; LightList.Clear(); LightList.Capacity = num3; for (int m = 0; m < num3; m++) { VmdLight vmdLight = new VmdLight(); vmdLight.FromBytes(bytes, num); num += vmdLight.ByteCount; LightList.Add(vmdLight); } if (bytes.Length <= num) { return; } num3 = BitConverter.ToInt32(bytes, num); num += 4; SelfShadowList.Clear(); SelfShadowList.Capacity = num3; for (int n = 0; n < num3; n++) { VmdSelfShadow vmdSelfShadow = new VmdSelfShadow(); vmdSelfShadow.FromBytes(bytes, num); num += vmdSelfShadow.ByteCount; SelfShadowList.Add(vmdSelfShadow); } if (bytes.Length > num) { num3 = BitConverter.ToInt32(bytes, num); num += 4; VisibleIKList.Clear(); VisibleIKList.Capacity = num3; for (int num4 = 0; num4 < num3; num4++) { VmdVisibleIK vmdVisibleIK = new VmdVisibleIK(); vmdVisibleIK.FromBytes(bytes, num); num += vmdVisibleIK.ByteCount; VisibleIKList.Add(vmdVisibleIK); } } }
public void Write(BinaryWriter bw, VmdVersion version) { bw.Write(this.FrameTime); bw.Write(this.Radius); this.Position.ForEach(bw.Write); this.Angle.ForEach(bw.Write); if (version == VmdVersion.MMDVer3) { WriteInterpolationPair(bw, this.XInterpolation); WriteInterpolationPair(bw, this.YInterpolation); WriteInterpolationPair(bw, this.ZInterpolation); WriteInterpolationPair(bw, this.AngleInterpolation); WriteInterpolationPair(bw, this.RadiusInterpolation); WriteInterpolationPair(bw, this.FovInterpolation); bw.Write(this.FovInDegree); bw.Write(this.Ortho); } else WriteInterpolationPair(bw, this.AngleInterpolation); }
public static VmdCameraFrame Parse(BinaryReader br, VmdVersion version) { var rt = new VmdCameraFrame { FrameTime = br.ReadUInt32(), Radius = br.ReadSingle(), Position = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, Angle = new[] { br.ReadSingle(), br.ReadSingle(), br.ReadSingle() }, }; if (version == VmdVersion.MMDVer3) { rt.XInterpolation = ReadInterpolationPair(br); rt.YInterpolation = ReadInterpolationPair(br); rt.ZInterpolation = ReadInterpolationPair(br); rt.AngleInterpolation = ReadInterpolationPair(br); rt.RadiusInterpolation = ReadInterpolationPair(br); rt.FovInterpolation = ReadInterpolationPair(br); rt.FovInDegree = br.ReadInt32(); rt.Ortho = br.ReadBoolean(); } else rt.AngleInterpolation = ReadInterpolationPair(br); return rt; }