public static MaterialData FromFile(string fileName) { //MaterialData data = new MaterialData(); XmlTextReader reader = new XmlTextReader(fileName); string result; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "MaterialData") { result = reader.GetAttribute("type"); if (result == "Animated") { MaterialData data = new MaterialData(); while (reader.NodeType != XmlNodeType.EndElement) { reader.Read(); if (reader.Name == "DiffuseMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu DiffuseMap w " + fileName); data.diffuseMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "NormalMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu NormalMap w " + fileName); data.normalMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "SpecularMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu SpeculareMap w " + fileName); data.specularMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "EmissiveMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu EmissiveMap w " + fileName); data.emissiveMap = ResourceCache.Instance.GetTexture(result); } } return new AnimatedMaterialData(data.diffuseMap, data.NormalMap, data.SpecularMap, data.EmissiveMap,new Material()); } else { MaterialData data = new MaterialData(); while (reader.NodeType != XmlNodeType.EndElement) { reader.Read(); if (reader.Name == "DiffuseMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu DiffuseMap w " + fileName); data.diffuseMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "NormalMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu NormalMap w " + fileName); data.normalMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "SpecularMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu SpeculareMap w " + fileName); data.specularMap = ResourceCache.Instance.GetTexture(result); } else if (reader.Name == "EmissiveMap") { result = reader.GetAttribute("file"); if (result == null) throw new FileFormatException("Nie znaleziono atrybutu EmissiveMap w " + fileName); data.emissiveMap = ResourceCache.Instance.GetTexture(result); } } return data; } } } return null; }
public void SetMaterial(MaterialData material, Material dxMaterial) { if (material != null) { if (material.MaterialType == MaterialType.Emissive) { SetEffect("emissive.fx"); currentEffect.DxEffect.Technique = "emissive_map"; currentEffect.DxEffect.SetValue("EmissiveTexture", material.EmissiveMap.DxTexture); } else { SetEffect("lighting.fx"); string handle = material.MaterialType.ToString(); currentEffect.DxEffect.Technique = handle; if (material.DiffuseMap != null) currentEffect.DxEffect.SetValue("DiffuseTexture", material.DiffuseMap.DxTexture); if (material.NormalMap != null) currentEffect.DxEffect.SetValue("NormalTexture", material.NormalMap.DxTexture); if (material.SpecularMap != null) currentEffect.DxEffect.SetValue("SpecularTexture", material.SpecularMap.DxTexture); if (material.EmissiveMap != null) currentEffect.DxEffect.SetValue("EmissiveTexture", material.EmissiveMap.DxTexture); currentEffect.DxEffect.SetValue("SpecularPower", dxMaterial.SpecularSharpness * 10); } } else { SetEffect("simple.fx"); currentEffect.DxEffect.Technique = "Simple"; currentEffect.DxEffect.SetValue("EmissiveColor", dxMaterial.EmissiveColor); currentEffect.DxEffect.SetValue("DiffuseColor", dxMaterial.DiffuseColor); currentEffect.DxEffect.SetValue("SpecularColor", dxMaterial.SpecularColor); currentEffect.DxEffect.SetValue("SpecularPower", dxMaterial.SpecularSharpness * 10); } }
/// <summary> /// Zwraca obiekt mesh, jeœli nie istnieje jeszcze to próbuje wczytaæ /// </summary> /// <param name="fileName">Nazwa pliku</param> /// <returns>Obiekt Mesh</returns> public Mesh GetMesh(string fileName,out MaterialData[] materials,out Material[] dxMaterials) { MeshEntry result = (MeshEntry)meshes[fileName]; if (result == null) { result = LoadMesh(fileName); meshes[fileName] = result; materials = result.Materials; dxMaterials = result.DxMaterials; return result.Mesh; } else { materials = result.Materials; dxMaterials = result.DxMaterials; return result.Mesh; } }