public override void ReadData(BinaryReader stream, IDictionary <object, object> userdata, int totalSize) { Positions = ReadStructArray <Vector4>(stream); UnusedVec3 = ReadStructArray <Vector4>(stream); Vertices = ReadStructArray <Vertex>(stream); Faces = ReadStructArray <Face>(stream); int num = stream.ReadInt32(); MorphFrames.Clear(); MorphFrames.Capacity = num; for (int i = 0; i < num; i++) { var frame = new VertexFrame(); frame.Time = stream.ReadInt32(); MorphFrames.Add(frame); } for (int i = 0; i < num; i++) { var frame = MorphFrames[i]; frame.Positions = ReadStructArray <Vector4>(stream); frame.Normals = ReadStructArray <Vector4>(stream); } Bones = ReadStructArray <Bone>(stream); FaceSmoothingGroupMasks = ReadStructArray <int>(stream); }
/// <summary> /// VMDを読み込む /// </summary> /// <returns>EndOfStreamExceptionが発生した場合 true を返す</returns> public bool Read(BinaryReader reader) { try { byte[] bChar = reader.ReadBytes(HEADER_LENGTH); header = new string(Encoding.GetChars(bChar)); int eosPos = header.IndexOf('\0'); if (eosPos >= 0) { header = header.Remove(eosPos); } bChar = reader.ReadBytes(MODEL_NAME_LENGTH); ModelName = new string(Encoding.GetChars(bChar)); eosPos = ModelName.IndexOf('\0'); if (eosPos >= 0) { ModelName = ModelName.Remove(eosPos); } uint len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { MotionFrames.Add(new VmdMotionFrameData(reader)); } len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { MorphFrames.Add(new VmdMorphFrameData(reader)); } //camera len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { CameraFrames.Add(new VmdCameraFrameData(reader)); } //light len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { LightFrames.Add(new VmdLightFrameData(reader)); } //self shadow len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { ShadowFrames.Add(new VmdShadowFrameData(reader)); } len = reader.ReadUInt32(); for (int i = 0; i < len; i++) { PropertyFrames.Add(new VmdPropertyFrameData(reader)); } return(false); } catch (EndOfStreamException) { return(true); } catch (Exception) { throw; } }