コード例 #1
0
        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;
        }
コード例 #2
0
ファイル: Renderer.cs プロジェクト: kensniper/castle-butcher
        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);

            }
        }
コード例 #3
0
        /// <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;
            }
        }