public IMaterial CreateMaterial(BspMaterialKey material) { var baseFileName = this.GetMaterialFileName(material.Material); var imagePath = baseFileName; var texture = new FileReferenceImage { Path = imagePath }; this.Scene.Images.Add(texture); var effect = new SceneEffect { CullMode = CullMode.None, //Diffuse = new ImageColorSource { Image = texture } }; this.Scene.Effects.Add(effect); var sceneMaterial = new SceneMaterial { Effect = effect }; this.Scene.Materials.Add(sceneMaterial); return sceneMaterial; }
private IColorSource ParseMap(AseParser parser, Scene scene) { var image = new FileReferenceImage(); var texture = new ImageColorSource { Image = image }; parser.Consume("{"); for (;;) { var attr = parser.Consume(); if (attr == null || attr == "}") { break; } if (0 == string.Compare(attr, "*MAP_NAME", StringComparison.InvariantCultureIgnoreCase)) { image.Id = image.Name = parser.Consume(); continue; } if (0 == string.Compare(attr, "*MAP_CLASS", StringComparison.InvariantCultureIgnoreCase)) { parser.Consume(); continue; } if (0 == string.Compare(attr, "*MAP_SUBNO", StringComparison.InvariantCultureIgnoreCase)) { parser.Consume(); continue; } if (0 == string.Compare(attr, "*MAP_AMOUNT", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*BITMAP", StringComparison.InvariantCultureIgnoreCase)) { image.Path = Path.Combine(this.basePath, parser.Consume()); continue; } if (0 == string.Compare(attr, "*MAP_TYPE", StringComparison.InvariantCultureIgnoreCase)) { parser.Consume(); continue; } if (0 == string.Compare(attr, "*UVW_U_OFFSET", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_V_OFFSET", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_U_TILING", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_V_TILING", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_ANGLE", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_BLUR", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_BLUR_OFFSET", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_NOUSE_AMT", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_NOISE_SIZE", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_NOISE_LEVEL", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*UVW_NOISE_PHASE", StringComparison.InvariantCultureIgnoreCase)) { parser.ConsumeFloat(); continue; } if (0 == string.Compare(attr, "*BITMAP_FILTER", StringComparison.InvariantCultureIgnoreCase)) { parser.Consume(); continue; } parser.UnknownLexemError(); } return texture; }
private void ParseImage(Scene scene, XElement image) { var initFrom = image.ElementValue(this.schema.initFromName); if (!string.IsNullOrEmpty(initFrom)) { var fileReferenceImage = new FileReferenceImage { Path = Path.Combine(this.basePath, initFrom) }; this.ParseIdAndName(image, fileReferenceImage); scene.Images.Add(fileReferenceImage); return; } var embeddedImage = new EmbeddedImage(); this.ParseIdAndName(image, embeddedImage); scene.Images.Add(embeddedImage); }
private void BuildSubmeshes(int maxTextures, SeparateStreamsSubmesh[] submeshes, SeparateStreamsMesh streamMesh, BspMeshStreams meshStreams) { int[] textureToMaterial = new int[maxTextures]; foreach (var quake3Face in this.faces) { ++textureToMaterial[quake3Face.texinfo_id]; } for (int i = 0; i < maxTextures; ++i) { if (textureToMaterial[i] > 0) { submeshes[i] = streamMesh.CreateSubmesh(); int index = this.Scene.Materials.Count; var baseFileName = Path.Combine(this.GameRootPath, this.textures[i].name); var imagePath = baseFileName; if (!File.Exists(imagePath)) { imagePath = baseFileName + ".jpg"; if (!File.Exists(imagePath)) { imagePath = baseFileName + ".png"; if (!File.Exists(imagePath)) { imagePath = baseFileName + ".tga"; if (!File.Exists(imagePath)) { imagePath = this.textures[i].name; } } } } var texture = new FileReferenceImage { Path = imagePath }; this.Scene.Images.Add(texture); var effect = new SceneEffect { Diffuse = new ImageColorSource { Image = texture }, CullMode = CullMode.Front}; this.Scene.Effects.Add(effect); var sceneMaterial = new SceneMaterial { Effect = effect }; this.Scene.Materials.Add(sceneMaterial); submeshes[i].Material = sceneMaterial; textureToMaterial[i] = index; } } }