private void AssignMaterialToMeshes(ModlEntry modlEntry, Material meshMaterial) { int subIndex = 0; string prevMesh = ""; if (RenderModel != null) { foreach (RMesh mesh in RenderModel.SubMeshes) { if (prevMesh.Equals(mesh.Name)) { subIndex++; } else { subIndex = 0; } prevMesh = mesh.Name; if (subIndex == modlEntry.SubIndex && mesh.Name.Equals(modlEntry.MeshName)) { mesh.Material = meshMaterial; break; } } } }
public static Modl CreateMODLFile(SBUltimateModel model) { Modl modl = new Modl(); modl.ModelEntries = new ModlEntry[model.Meshes.Count]; Dictionary <string, int> subindex = new Dictionary <string, int>(); int i = 0; foreach (var mesh in model.Meshes) { var entry = new ModlEntry(); modl.ModelEntries[i++] = entry; if (!subindex.ContainsKey(mesh.Name)) { subindex.Add(mesh.Name, 0); } entry.MeshName = mesh.Name; entry.SubIndex = subindex[mesh.Name]; if (mesh.Material != null) { entry.MaterialLabel = mesh.Material.Label; } else { SBConsole.WriteLine("Warning: Missing material"); } subindex[mesh.Name]++; SBConsole.WriteLine($"Creating modl entry: {entry.MeshName} {entry.SubIndex} {entry.MaterialLabel}"); } return(modl); }
private void AssignMaterialToMeshes(ModlEntry modlEntry, RMaterial meshMaterial) { var meshes = RenderModel.SubMeshes.Where(m => m.Name == modlEntry.MeshName && m.SubIndex == modlEntry.SubIndex); foreach (var mesh in meshes) { mesh.Material = meshMaterial; } }