public static ExtractedM2 Process(string basePath, MapId mapId, string path) { basePath = Path.Combine(basePath, mapId.ToString()); var filePath = Path.Combine(basePath, path); filePath = Path.ChangeExtension(filePath, ".m2x"); if (!File.Exists(filePath)) { throw new FileNotFoundException("Extracted M2 file not found: {0}", filePath); } var m2 = new ExtractedM2(); using(var file = File.OpenRead(filePath)) using(var br = new BinaryReader(file)) { var type = br.ReadString(); if (type != fileType) { br.Close(); throw new InvalidDataException(string.Format("M2x file in invalid format: {0}", filePath)); } m2.Extents = br.ReadBoundingBox(); m2.BoundingVertices = br.ReadVector3List(); m2.BoundingTriangles = br.ReadIndex3List(); br.Close(); } return m2; }
public static ExtractedM2 Process(string basePath, MapId mapId, string path) { basePath = Path.Combine(basePath, mapId.ToString()); var filePath = Path.Combine(basePath, path); filePath = Path.ChangeExtension(filePath, ".m2x"); if (!File.Exists(filePath)) { throw new FileNotFoundException("Extracted M2 file not found: {0}", filePath); } var m2 = new ExtractedM2(); using (var file = File.OpenRead(filePath)) using (var br = new BinaryReader(file)) { var type = br.ReadString(); if (type != fileType) { br.Close(); throw new InvalidDataException(string.Format("M2x file in invalid format: {0}", filePath)); } m2.Extents = br.ReadBoundingBox(); m2.BoundingVertices = br.ReadVector3List(); m2.BoundingTriangles = br.ReadIndex3List(); br.Close(); } return(m2); }
private static void Transform(ExtractedM2 m2, ExtractedMapM2Definition def) { for (var i = 0; i < m2.BoundingVertices.Count; i++) { // Scale and transform var vertex = m2.BoundingVertices[i]; Vector3 rotatedVector; Vector3.Transform(ref vertex, ref def.ModelToWorld, out rotatedVector); // Translate Vector3 finalVector; Vector3.Add(ref rotatedVector, ref def.Position, out finalVector); m2.BoundingVertices[i] = finalVector; //currentM2.Vertices.Add(new VertexPositionNormalColored(finalVector, Color.Red, Vector3.Up)); } }
private static void TransformM2(ExtractedM2 m2, ExtractedWMOM2Definition m2Def) { for (var i = 0; i < m2.BoundingVertices.Count; i++) { var vec = m2.BoundingVertices[i]; Vector3 rotatedVec; Vector3.Transform(ref vec, ref m2Def.ModeltoWMO, out rotatedVec); Vector3 finalVec; Vector3.Add(ref rotatedVec, ref m2Def.Position, out finalVec); m2.BoundingVertices[i] = finalVec; } }