zoukankan      html  css  js  c++  java
  • unity camera RenderWithShader ,SetReplacementShader

    2.2.2 RenderWithShader方法:使用其他shader渲染

    基本语法:public void RenderWithShader(Shader shader, string replacementTag);

    其中参数shader为要使用的shader;replacementTag 为shader的Tag标示。

    功能说明:此方法的作用是可以使用指定的shader来代替当前物体的shader渲染一帧。当replacementTag为空时会替换视口中所有物体的shader。

    提示:SetReplacementShader方法与此方法功能相近,不同之处是,SetReplacementShader方法使用指定的shader来替换物体当前的shader,被替换后每一帧都会用替换的shader来渲染物体,而不是只渲染一帧,具体请查看实例演示。

    实例演示:下面通过实例演示方法RenderWithShader的使用。

    using UnityEngine;
    using System.Collections;
    
    public class RenderWithShader_ts : MonoBehaviour
    {
    bool is_use = false;
    void OnGUI()
    {
    if (is_use)
    {
    //使用高光shader:Specular来渲染Camera
    camera.RenderWithShader(Shader.Find("Specular"), "RenderType");
    }
    if (GUI.Button(new Rect(10.0f, 10.0f, 300.0f, 45.0f), "使用RenderWithShader启用高光"))
    {
    //RenderWithShader每调用一次只渲染一帧,所以不可将其直接放到这儿
    //camera.RenderWithShader(Shader.Find("Specular"), "RenderType")
    is_use = true;
    }
    if (GUI.Button(new Rect(10.0f, 60.0f, 300.0f, 45.0f), "使用SetReplacementShader启用高光"))
    {
    //SetReplacementShader方法用来替换已有shader,调用一次即可
    camera.SetReplacementShader(Shader.Find("Specular"), "RenderType");
    is_use = false;
    }
    if (GUI.Button(new Rect(10.0f, 110.0f, 300.0f, 45.0f), "关闭高光"))
    {
    //重置摄像机的shader渲染模式
    camera.ResetReplacementShader();
    is_use = false;
    }
    }
    }
    

      

    在这段代码中,首先定义了一个变量is_use用来记录是否启用高光shader,如果is_use为true,则在OnGUI方法中调用方法RenderWithShader来替换已有shader,也可直接使用方法SetReplacementShader来替换已有shader。如果要关闭高光则只需重置shader即调用方法ResetReplacementShader(),并修改is_use值为false,具体显示情况请读者自行运行程序查看。

    提示:方法RenderWithShader每调用一次只渲染一帧,故不可直接将其放到GUI的Button中,否则看不出效果。


    本文章内容摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474
    ————————————————
    版权声明:本文为CSDN博主「宏哥的博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/quan2008happy/article/details/39380463

  • 相关阅读:
    CURL常用命令
    极客无极限 一行HTML5代码引发的创意大爆炸
    JS的prototype和__proto__(含es6的class)
    leetcode 44:construct-binary-tree-from-preorder-and-inorder
    leetcode 43:construct-binary-tree-from-inorder-and-postorder
    leetcode 42:binary-tree-level-order-traversal-ii
    leetcode 38:path-sum
    leetcode 37:path-sum-ii
    leetcode 33:pascals-triangle
    leetcode 32:pascals-triangle-ii
  • 原文地址:https://www.cnblogs.com/nafio/p/12187400.html
Copyright © 2011-2022 走看看