Beispiel #1
0
        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());
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
        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
            });
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
 public void Write(BinaryWriter bw, VmdVersion version)
 {
     VmdDocument.WriteVmdString(bw, this.Name, 15, version);
     bw.Write(this.FrameTime);
     bw.Write(this.Weight);
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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());
        }
Beispiel #9
0
        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);
                }
            }
        }
Beispiel #10
0
 public void Write(BinaryWriter bw, VmdVersion version)
 {
     VmdDocument.WriteVmdString(bw, this.Name, 15, version);
     bw.Write(this.FrameTime);
     bw.Write(this.Weight);
 }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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;
        }