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