/// <summary> /// Loads the file from the specified stream. /// </summary> /// <param name="stream">The stream to read from.</param> public override void Load(Stream stream) { BinaryReader reader = new BinaryReader(stream, Encoding.GetEncoding("EUC-KR")); string identifier = reader.ReadNullTerminatedString(); int version; if (string.Compare(identifier, FILE_IDENTIFIER_7, false) == 0) { version = 7; } else if (string.Compare(identifier, FILE_IDENTIFIER_8, false) == 0) { version = 8; } else { throw new FileIdentifierMismatchException(FilePath, string.Format("{0} / {1}", FILE_IDENTIFIER_7, FILE_IDENTIFIER_8), identifier); } format = (VertexFormat)reader.ReadInt32(); BoundingBox = new BoundingBox(reader.ReadVector3(), reader.ReadVector3()); short boneCount = reader.ReadInt16(); for (int i = 0; i < boneCount; i++) { BoneTable.Add(reader.ReadInt16()); } short vertexCount = reader.ReadInt16(); for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = new ModelVertex(); vertex.Position = reader.ReadVector3(); Vertices.Add(vertex); } if (NormalsEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.Normal = reader.ReadVector3(); } } if (ColoursEnabled) { for (int i = 0; i < vertexCount; i++) { float alpha = reader.ReadSingle(); ModelVertex vertex = Vertices[i]; vertex.Colour = new Color4(reader.ReadVector3(), alpha); } } if (BonesEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.BoneWeights = reader.ReadVector4(); vertex.BoneIndices = reader.ReadShortVector4(); } } if (TangentsEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.Tangent = reader.ReadVector3(); } } if (TextureCoordinates1Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[0] = reader.ReadVector2(); } } if (TextureCoordinates2Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[1] = reader.ReadVector2(); } } if (TextureCoordinates3Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[2] = reader.ReadVector2(); } } if (TextureCoordinates4Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[3] = reader.ReadVector2(); } } short indexCount = reader.ReadInt16(); for (int i = 0; i < indexCount; i++) { Indices.Add(reader.ReadShortVector3()); } short materialCount = reader.ReadInt16(); for (int i = 0; i < materialCount; i++) { Materials.Add(reader.ReadInt16()); } short stripCount = reader.ReadInt16(); for (int i = 0; i < stripCount; i++) { Strips.Add(reader.ReadInt16()); } if (version >= 8) { Pool = (PoolType)reader.ReadInt16(); } }
/// <summary> /// Loads the file from the specified stream. /// </summary> /// <param name="stream">The stream to read from.</param> public override void Load(Stream stream) { BinaryReader reader = new BinaryReader(stream, Encoding.GetEncoding("EUC-KR")); string identifier = reader.ReadNullTerminatedString(); int version; if (string.Compare(identifier, FILE_IDENTIFIER_7, false) == 0) { version = 7; } else if (string.Compare(identifier, FILE_IDENTIFIER_8, false) == 0) { version = 8; } else { throw new FileIdentifierMismatchException(FilePath, string.Format("{0} / {1}", FILE_IDENTIFIER_7, FILE_IDENTIFIER_8), identifier); } format = (VertexFormat)reader.ReadInt32(); BoundingBox = new Bounds(reader.ReadVector3(), reader.ReadVector3()); short boneCount = reader.ReadInt16(); for (int i = 0; i < boneCount; i++) { BoneTable.Add(reader.ReadInt16()); } short vertexCount = reader.ReadInt16(); for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = new ModelVertex(); vertex.Position = reader.ReadVector3(); Vertices.Add(vertex); } if (NormalsEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.Normal = reader.ReadVector3(); } } if (ColoursEnabled) { for (int i = 0; i < vertexCount; i++) { float a = reader.ReadSingle(); ModelVertex vertex = Vertices[i]; vertex.Colour = new Color(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), a); } } if (BonesEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.BoneWeights = reader.ReadVector4(); vertex.BoneIndices = reader.ReadShortVector4(); } } if (TangentsEnabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.Tangent = reader.ReadVector3(); } } if (TextureCoordinates1Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[0] = reader.ReadVector2(); } } if (TextureCoordinates2Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[1] = reader.ReadVector2(); } } if (TextureCoordinates3Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[2] = reader.ReadVector2(); } } if (TextureCoordinates4Enabled) { for (int i = 0; i < vertexCount; i++) { ModelVertex vertex = Vertices[i]; vertex.TextureCoordinates[3] = reader.ReadVector2(); } } short indexCount = reader.ReadInt16(); for (int i = 0; i < indexCount; i++) { Indices.Add(reader.ReadShortVector3()); } short materialCount = reader.ReadInt16(); for (int i = 0; i < materialCount; i++) { Materials.Add(reader.ReadInt16()); } short stripCount = reader.ReadInt16(); for (int i = 0; i < stripCount; i++) { Strips.Add(reader.ReadInt16()); } if (version >= 8) { Pool = (PoolType)reader.ReadInt16(); } }