public static AMesh Load(Stream stream) { AMesh result = new AMesh(); result.Header = MemoryUtils.ReadStruct <AMeshHeader>(stream); result.MaterialName = MemoryUtils.ReadAnsiString(stream); bool tangents = (result.Header.Flags & AMeshFlags.HaveTangents) != AMeshFlags.None; if (tangents) { result.Tangent = new List <AVector4>(); for (ushort i = 0; i < result.Header.VerticesCount; ++i) { result.Position.Add(MemoryUtils.ReadStruct <AVector3>(stream)); result.UV0.Add(MemoryUtils.ReadStruct <AVector2>(stream)); result.Normal.Add(MemoryUtils.ReadStruct <AVector3>(stream)); result.Tangent.Add(MemoryUtils.ReadStruct <AVector4>(stream)); } } else { for (ushort i = 0; i < result.Header.VerticesCount; ++i) { result.Position.Add(MemoryUtils.ReadStruct <AVector3>(stream)); result.Normal.Add(MemoryUtils.ReadStruct <AVector3>(stream)); result.UV0.Add(MemoryUtils.ReadStruct <AVector2>(stream)); } } var indices = new List <ushort>(); BinaryReader reader = new BinaryReader(stream); for (ushort i = 0; i < result.Header.PolygonsCount; ++i) { for (ushort j = 0; j < 3; ++j) { indices.Add(reader.ReadUInt16()); } } result.Indices = indices.ToArray(); return(result); }