private static Vector3 readVector3(ExportOptions exportOptions, Int32 offset, Mesh.VertexStream vertexStream, Int32 index) { Vector3 vector3 = new Vector3(); switch (exportOptions.LeftAxis) { case Axes.X: vector3.X = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0); break; case Axes.Y: vector3.Y = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0); break; case Axes.Z: vector3.Z = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 0); break; } switch (exportOptions.UpAxis) { case Axes.X: vector3.X = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 4); break; case Axes.Y: vector3.Y = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 4); break; case Axes.Z: vector3.Z = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 4); break; } Axes forwardAxis = getForwardAxis(exportOptions.LeftAxis, exportOptions.UpAxis); switch (forwardAxis) { case Axes.X: vector3.X = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 8); break; case Axes.Y: vector3.Y = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 8); break; case Axes.Z: vector3.Z = BitConverter.ToSingle(vertexStream.Data, (vertexStream.BytesPerVertex * index) + offset + 8); break; } return vector3; }
public static Mesh LoadFromStream(Model model, Stream stream) { BinaryReader binaryReader = new BinaryReader(stream); uint bytesPerVertex = 0; uint vertexStreamCount = 0; Mesh mesh = new Mesh(model); mesh.MaterialIndex = binaryReader.ReadUInt32(); mesh.Unknown1 = binaryReader.ReadUInt32(); mesh.Unknown2 = binaryReader.ReadUInt32(); mesh.Unknown3 = binaryReader.ReadUInt32(); vertexStreamCount = binaryReader.ReadUInt32(); mesh.IndexSize = binaryReader.ReadUInt32(); mesh.IndexCount = binaryReader.ReadUInt32(); mesh.VertexCount = binaryReader.ReadUInt32(); mesh.VertexStreams = new VertexStream[(int)vertexStreamCount]; // read vertex streams for (int j = 0; j < vertexStreamCount; ++j) { bytesPerVertex = binaryReader.ReadUInt32(); byte[] buffer = binaryReader.ReadBytes((int)mesh.VertexCount * (int)bytesPerVertex); VertexStream vertexStream = new VertexStream((int)bytesPerVertex, buffer); if (vertexStream != null) { mesh.VertexStreams[j] = vertexStream; } } // read indices mesh.IndexData = binaryReader.ReadBytes((int)mesh.IndexCount * (int)mesh.IndexSize); uint materialDefinitionHash = model.Materials[(int)mesh.MaterialIndex].MaterialDefinitionHash; MaterialDefinition materialDefinition = null; MaterialDefinitionLibrary.Instance.MaterialDefinitions.TryGetValue(materialDefinitionHash, out materialDefinition); string effectName = materialDefinition.DrawStyles[0].Effect; return mesh; }
public static Mesh LoadFromStream(Stream stream, ICollection<Dma.Material> materials) { BinaryReader binaryReader = new BinaryReader(stream); Mesh mesh = new Mesh(); UInt32 bytesPerVertex = 0; UInt32 vertexStreamCount = 0; mesh.MaterialIndex = binaryReader.ReadUInt32(); mesh.Unknown1 = binaryReader.ReadUInt32(); mesh.Unknown2 = binaryReader.ReadUInt32(); mesh.Unknown3 = binaryReader.ReadUInt32(); vertexStreamCount = binaryReader.ReadUInt32(); mesh.IndexSize = binaryReader.ReadUInt32(); mesh.IndexCount = binaryReader.ReadUInt32(); mesh.VertexCount = binaryReader.ReadUInt32(); mesh.VertexStreams = new VertexStream[(Int32)vertexStreamCount]; // read vertex streams for (Int32 j = 0; j < vertexStreamCount; ++j) { bytesPerVertex = binaryReader.ReadUInt32(); VertexStream vertexStream = VertexStream.LoadFromStream(binaryReader.BaseStream, (Int32)mesh.VertexCount, (Int32)bytesPerVertex); if (vertexStream != null) { mesh.VertexStreams[j] = vertexStream; } } // read indices mesh.IndexData = binaryReader.ReadBytes((Int32)mesh.IndexCount * (Int32)mesh.IndexSize); return mesh; }