private static List <MeshGeometryModel3D> GenerateMeshGeometryModels(MGEOFile mgeo) { List <MeshGeometryModel3D> models = new List <MeshGeometryModel3D>(mgeo.Objects.Count); foreach (MGEOObject mgeoModel in mgeo.Objects) { IntCollection indices = new IntCollection(mgeoModel.Indices.Select(x => (int)x).AsEnumerable()); Vector3Collection vertices = new Vector3Collection(mgeoModel.Vertices.Count); Vector2Collection uvs = new Vector2Collection(mgeoModel.Vertices.Count); foreach (MGEOVertex vertex in mgeoModel.Vertices) { vertices.Add(new dxVector3(vertex.Position.X, vertex.Position.Y, vertex.Position.Z)); uvs.Add(new dxVector2(vertex.DiffuseUV.X, vertex.DiffuseUV.Y)); } MeshGeometry3D meshGeometry = new MeshGeometry3D() { Indices = indices, Positions = vertices, TextureCoordinates = uvs }; MeshGeometryModel3D model = new MeshGeometryModel3D() { Geometry = meshGeometry, Material = DiffuseMaterials.Pearl, Name = mgeoModel.Name }; models.Add(model); } return(models); }
public static IEnumerable <GroupNode> LoadMapMGEO(MGEOFile mgeo, MapData mapData, string mapPath) { foreach (MGEOObject mgeoModel in mgeo.Objects) { IntCollection indices = new IntCollection(mgeoModel.Indices.Select(x => (int)x).AsEnumerable()); Vector3Collection vertices = new Vector3Collection(mgeoModel.Vertices.Count); Vector2Collection uvs = new Vector2Collection(mgeoModel.Vertices.Count); foreach (MGEOVertex vertex in mgeoModel.Vertices) { vertices.Add(new dxVector3(vertex.Position.X, vertex.Position.Y, vertex.Position.Z)); uvs.Add(new dxVector2(vertex.DiffuseUV.X, vertex.DiffuseUV.Y)); } foreach (MGEOSubmesh submesh in mgeoModel.Submeshes) { GroupNode groupNode = new GroupNode() { Name = mgeoModel.Name }; MeshGeometry3D submeshGeometry3D = new MeshGeometry3D() { Indices = indices.GetRange((int)submesh.StartIndex, (int)submesh.IndexCount) as IntCollection, Positions = vertices, TextureCoordinates = uvs }; DiffuseMaterial diffuseMaterial = new DiffuseMaterial() { Name = submesh.Material, DiffuseMap = CreateMaterial(submesh.Material, mapData, mapPath), EnableUnLit = true }; groupNode.AddChildNode(new MeshNode() { Name = mgeoModel.Name + "|" + submesh.Material, Geometry = submeshGeometry3D, Material = diffuseMaterial }); yield return(groupNode); } } }
static void MGEOTest() { MGEOFile mgeo1 = new MGEOFile(@"C:\Riot Games\League of Legends\Game\MOD\DATA\Maps\MapGeometry\Map12\Base.mapgeo"); foreach (MGEOObject model in mgeo1.Objects) { foreach (Vector3 vector in model.UnknownFloats) { vector.X = 0; vector.Y = 0; vector.Z = 0; } } /*for(int i = 100; i < mgeo1.Objects.Count; i++) * { * mgeo1.Objects.RemoveAt(i); * }*/ mgeo1.Write(@"C:\Riot Games\League of Legends\Game\MOD\DATA\Maps\MapGeometry\Map12\Base.mapgeo", 7); }
public static IEnumerable <Tuple <string, OBJFile> > ConvertMGEOModels(MGEOFile mgeo) { foreach (MGEOObject model in mgeo.Objects) { List <Vector3> vertices = new List <Vector3>(); List <Vector3> normals = new List <Vector3>(); List <Vector2> uvs = new List <Vector2>(); foreach (MGEOVertex vertex in model.Vertices) { vertices.Add(model.Transformation.ApplyTransformation(vertex.Position)); normals.Add(vertex.Normal); if (vertex.DiffuseUV != null) { uvs.Add(vertex.DiffuseUV); } } yield return(new Tuple <string, OBJFile>(model.Name, new OBJFile(vertices, model.Indices.Select(x => (uint)x).ToList(), uvs, normals))); } }
public static SceneNodeGroupModel3D LoadMapMGEO(MGEOFile mgeo) { List <MeshGeometryModel3D> meshGeometryModels = GenerateMeshGeometryModels(mgeo); SceneNodeGroupModel3D mainModelGroup = new SceneNodeGroupModel3D(); foreach (MeshGeometryModel3D meshGeometryModel in meshGeometryModels) { GroupNode groupNode = new GroupNode() { Name = meshGeometryModel.Name }; groupNode.AddChildNode(new MeshNode() { Name = meshGeometryModel.Name, Geometry = meshGeometryModel.Geometry, Material = meshGeometryModel.Material, }); mainModelGroup.AddNode(groupNode); } return(mainModelGroup); }