/// <summary> /// Clears all vertices, indices, bone tables, materials and strips. /// </summary> public void Clear() { BoneTable.Clear(); Vertices.Clear(); Indices.Clear(); Materials.Clear(); Strips.Clear(); }
/// <summary> /// Saves the file to the specified stream. /// </summary> /// <param name="stream">The stream to save to.</param> public override void Save(Stream stream) { BinaryWriter writer = new BinaryWriter(stream, Encoding.GetEncoding("EUC-KR")); writer.WriteString(FILE_IDENTIFIER_8); writer.Write((byte)0); writer.Write((int)format); writer.Write(BoundingBox.Minimum); writer.Write(BoundingBox.Maximum); writer.Write((short)BoneTable.Count); BoneTable.ForEach(bone => { writer.Write(bone); }); writer.Write((short)Vertices.Count); Vertices.ForEach(vertex => { writer.Write(vertex.Position); }); if (NormalsEnabled) { Vertices.ForEach(vertex => { writer.Write(vertex.Normal); }); } if (ColoursEnabled) { Vertices.ForEach(vertex => { writer.Write(vertex.Colour.Alpha); writer.Write(vertex.Colour.Red); writer.Write(vertex.Colour.Green); writer.Write(vertex.Colour.Blue); }); } if (BonesEnabled) { Vertices.ForEach(vertex => { writer.Write(vertex.BoneWeights); writer.Write(vertex.BoneIndices); }); } if (TangentsEnabled) { Vertices.ForEach(vertex => { writer.Write(vertex.Tangent); }); } if (TextureCoordinates1Enabled) { Vertices.ForEach(vertex => { writer.Write(vertex.TextureCoordinates[0]); }); } if (TextureCoordinates2Enabled) { Vertices.ForEach(vertex => { writer.Write(vertex.TextureCoordinates[1]); }); } if (TextureCoordinates3Enabled) { Vertices.ForEach(vertex => { writer.Write(vertex.TextureCoordinates[2]); }); } if (TextureCoordinates4Enabled) { Vertices.ForEach(vertex => { writer.Write(vertex.TextureCoordinates[3]); }); } writer.Write((short)Indices.Count); Indices.ForEach(index => { writer.Write(index); }); writer.Write((short)Materials.Count); Materials.ForEach(material => { writer.Write(material); }); writer.Write((short)Strips.Count); Strips.ForEach(strip => { writer.Write(strip); }); writer.Write((short)Pool); }
/// <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(); } }