国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Unity shader實現自由放大縮小效果

2020-01-24 00:09:00
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Unity shader實現自由放大縮小效果的具體代碼,供大家參考,具體內容如下

代碼:

以下實現的shader代碼:

Shader "Hidden/Wave"{ Properties { _MainTex ("Texture", 2D) = "white" {} _WaveWidth("Wave Width",float) = 0.5 _CenterX("CenterX",float)=0.5 _CenterY("CenterY",float)=0.5 } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always Pass {  CGPROGRAM  #pragma vertex vert  #pragma fragment frag    #include "UnityCG.cginc"  struct appdata  {  float4 vertex : POSITION;  float2 uv : TEXCOORD0;  };  struct v2f  {  float2 uv : TEXCOORD0;  float4 vertex : SV_POSITION;  };  float _WaveWidth;  float _CenterX;  float _CenterY;  v2f vert (appdata v)  {  v2f o;  o.vertex = UnityObjectToClipPos(v.vertex);  o.uv = v.uv;  return o;  }    sampler2D _MainTex;  fixed4 frag (v2f i) : SV_Target  {  float2 center=float2(_CenterX,_CenterY);  float2 distance= center - i.uv;  float x=center.x+ center.x*(-distance.x/center.x) *(1-_WaveWidth);  float y=center.y+ center.y*(-distance.y/center.y) *(1-_WaveWidth);  float2 uv = float2(x,y);  return tex2D(_MainTex, uv);    }  ENDCG } }}

主要的內容還是在frag中。

下面是掛在攝像機上的腳本:

using System.Collections;using System.Collections.Generic;using UnityEngine; public class WaveCreame : MonoBehaviour {    public Shader waveShader = null;  [Range(0.0f,1f)]  public float waveWidth = 0.3f;  private Material m_WaveMaterial = null;  private float m_CenterX = 0.5f;  private float m_CtenterY = 0.5f; // Use this for initialization void Start () {    m_WaveMaterial = new Material(waveShader); }  // Update is called once per frame void Update () {    Vector3 pos = Input.mousePosition;    m_CenterX = pos.x / Screen.width;    m_CtenterY = pos.y / Screen.height;    if (Input.GetMouseButton(0)) {      waveWidth += Time.deltaTime * 0.5f;    }    if (Input.GetMouseButton(1))    {      waveWidth -= Time.deltaTime * 0.5f;    }  }   private void OnRenderImage(RenderTexture source, RenderTexture destination)  {    if (waveShader == null || m_WaveMaterial == null) return;    m_WaveMaterial.SetFloat("_WaveWidth", waveWidth);    m_WaveMaterial.SetFloat("_CenterX", m_CenterX);    m_WaveMaterial.SetFloat("_CenterY", m_CtenterY);    Graphics.Blit(source, destination, m_WaveMaterial);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都安| 游戏| 朝阳市| 花垣县| 札达县| 屯昌县| 武威市| 卓尼县| 天津市| 玛沁县| 宜州市| 虞城县| 宁都县| 庆安县| 资讯 | 定日县| 亚东县| 尖扎县| 项城市| 深泽县| 绥中县| 玉林市| 凭祥市| 富平县| 山丹县| 永福县| 华阴市| 无极县| 花莲市| 米泉市| 仪陇县| 宜昌市| 龙胜| 二连浩特市| 武汉市| 屏山县| 宁南县| 法库县| 永宁县| 宁南县| 象山县|