コード例 #1
0
    public static void CancelSetMaterial(Renderer renderer,CustomShader type)
    {
        if (renderer == null)
            return;

        CancelSetMaterial(renderer, GetShaderName(type));
    }
コード例 #2
0
    public static void CancelSetMaterial(Renderer renderer, CustomShader type)
    {
        if (renderer == null)
        {
            return;
        }

        CancelSetMaterial(renderer, GetShaderName(type));
    }
コード例 #3
0
    public static void SetLightMaterial(Renderer renderer, CustomShader type, Hashtable shaderParams = null)
    {
        if (renderer == null)
        {
            return;
        }
        string shaderName = GetShaderName(type);

        SetMaterial(renderer, Shader.Find(shaderName), LIGHT_MATERIAL_NAME, shaderParams);
    }
コード例 #4
0
 private static string GetShaderName(CustomShader type)
 {
     switch (type)
     {
         case CustomShader.OUTLINE_GLOW:return OUTLINE_GLOW;
         case CustomShader.Edge_GLOW:return Edge_GLOW;
         default:
             return LIGHT_SHADER_PATH_1;
     }
 }
コード例 #5
0
    private static string GetShaderName(CustomShader type)
    {
        switch (type)
        {
        case CustomShader.OUTLINE_GLOW: return(OUTLINE_GLOW);

        case CustomShader.Edge_GLOW: return(Edge_GLOW);

        default:
            return(LIGHT_SHADER_PATH_1);
        }
    }
コード例 #6
0
        /// <summary>
        /// Tries to read import statements for external .FX files
        /// </summary>
        /// <param name="xmlEffect">xml effect node</param>
        /// <param name="material">Material instance to store data in</param>
        void ReadEffectImport(XmlNode xmlMaterial, XmlNode xmlEffect, ref Material material)
        {
            // for now the simplest solution: Simply search for a file path containing ".fx"
            Match match = Regex.Match(xmlEffect.InnerXml, "\"([^\"]+\\.fx)\"");

            if (!match.Success)
            {
                return;
            }
            string filename = match.Groups[1].Value.Replace("%20", " ");

            if (!Path.IsPathRooted(filename))
            {
                filename = Path.GetDirectoryName(model.SourceFilename) + "\\" + filename;
            }

            CustomShader shader = new CustomShader();

            shader.Filename = filename;

            // Set parameters as given in <instance_effect>
            XmlNode xmlInstanceEffect = xmlMaterial.SelectSingleNode("instance_effect");

            if (xmlInstanceEffect == null)
            {
                return;
            }

            foreach (XmlNode setparam in xmlInstanceEffect.SelectNodes("setparam"))
            {
                // Name referencing a shader parameter
                string name = setparam.GetAttributeString("ref");

                // value can be color, vector, single or texture
                Object  value     = null;
                XmlNode valueNode = setparam.FirstChild;

                switch (valueNode.Name)
                {
                case "float":
                    value = XmlUtil.ParseFloats(valueNode.InnerText)[0];
                    break;

                case "float3":
                    value = XmlUtil.ParseVector3(valueNode.InnerText);
                    break;

                case "float4":
                    value = XmlUtil.ParseVector4(valueNode.InnerText);
                    break;

                case "float4x4":
                    value = XmlUtil.ParseMatrix(valueNode.InnerText);
                    break;

                case "surface":

                    TextureReference texture = new TextureReference();
                    texture.TextureChannel = "CHANNEL1";

                    string imageId = valueNode.SelectSingleNode("init_from").InnerText;

                    // texture/surface -> image
                    XmlNode root          = xmlEffect.OwnerDocument.DocumentElement;
                    XmlNode imageInitFrom = root.SelectSingleNode("library_images/image[@id='" +
                                                                  imageId + "']/init_from");
                    if (imageInitFrom == null)
                    {
                        throw new Exception("Image not found: " + imageId, null);
                    }

                    texture.Filename = imageInitFrom.InnerText.Trim();
                    texture.Filename = texture.Filename.Replace("file://", "");

                    if (!Path.IsPathRooted(texture.Filename))
                    {
                        texture.Filename = Path.GetDirectoryName(model.SourceFilename) + "\\" +
                                           texture.Filename;
                    }

                    value = texture;

                    break;
                }

                if (value != null)
                {
                    shader.Parameters.Add(name, value);
                }
            }

            material.Properties.Add(shader);
        }
コード例 #7
0
 public static void SetLightMaterial(Renderer renderer,CustomShader type,Hashtable shaderParams = null)
 {
     if (renderer == null) return;
     string shaderName = GetShaderName(type);
     SetMaterial(renderer, Shader.Find(shaderName), LIGHT_MATERIAL_NAME, shaderParams);
 }