Example #1
0
        public static VMDFile LoadFromFile(string vmdFile)
        {
            FileStream fs = new FileStream(vmdFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            VMDFile vf = VMDFile.LoadFromStream(fs);

            fs.Close();
            fs = null;

            return(vf);
        }
Example #2
0
        public static VMDFile LoadFromStream(Stream s)
        {
            BinaryReader br = new BinaryReader(s);

            string head = VMDString.ReadString(br, 30, Encoding.ASCII);

            if (head != "Vocaloid Motion Data 0002")
            {
                br = null;
                return(null);
            }


            VMDFile vf = new VMDFile();

            vf.ModelName = VMDString.ReadString(br, 20);

            uint boneCount = br.ReadUInt32();

            for (int i = 0; i < boneCount; i++)
            {
                VMDBoneFrame vbf = new VMDBoneFrame();
                vbf.LoadFromStream(br);
                vf.Bones.Add(vbf);
            }

            uint morphCount = br.ReadUInt32();

            for (int i = 0; i < morphCount; i++)
            {
                VMDMorphFrame vmf = new VMDMorphFrame();
                vmf.LoadFromStream(br);
                vf.Morphs.Add(vmf);
            }

            uint cameraCount = br.ReadUInt32();

            for (int i = 0; i < cameraCount; i++)
            {
                VMDCameraFrame vcf = new VMDCameraFrame();
                vcf.LoadFromStream(br);
                vf.Camera.Add(vcf);
            }

            uint lightCount = br.ReadUInt32();

            for (int i = 0; i < lightCount; i++)
            {
                VMDLightFrame vlf = new VMDLightFrame();
                vlf.LoadFromStream(br);
                vf.Light.Add(vlf);
            }

            uint shadowCount = br.ReadUInt32();

            for (int i = 0; i < shadowCount; i++)
            {
                VMDShadowFrame vsf = new VMDShadowFrame();
                vsf.LoadFromStream(br);
                vf.Shadow.Add(vsf);
            }

            if (br.BaseStream.Position < br.BaseStream.Length)
            {
                uint ikCount = br.ReadUInt32();
                for (int i = 0; i < ikCount; i++)
                {
                    VMDIKFrame vif = new VMDIKFrame();
                    vif.LoadFromStream(br);
                    vf.IK.Add(vif);
                }
            }

            return(vf);
        }