unity shader 实现自由放大缩小效果
来源:互联网 发布:jquery.downcount.js 编辑:程序博客网 时间:2024/05/14 03:18
以下实现的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 depthCull Off ZWrite Off ZTest AlwaysPass{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 initializationvoid Start () { m_WaveMaterial = new Material(waveShader);}// Update is called once per framevoid 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); }}
阅读全文
1 0
- unity shader 实现自由放大缩小效果
- unity通过改变相机视野实现UI元素放大缩小的效果
- unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果
- CSS、jQuery实现放大缩小动画效果
- android 控件放大缩小效果实现
- Unity喷墨效果Shader实现
- unity触摸放大缩小旋转
- Flash实现动画影片中图片缓冲放大和缩小效果
- android初学------使用ScaleAnimation 动画实现放大缩小效果
- 自定义ImageView实现图片手势滑动、放大缩小效果
- RecycleView实现Gallery画廊效果,中间放大两边缩小
- Android 首页实现放大缩小的画廊效果
- Android图片放大缩小自由移动控件
- Unity用Shader实现波浪效果
- 图片下拉缩小放大效果
- android自定义view实现可自由放大缩小和移动的imageView
- Unity Shader——Shader实现大海的波涛效果
- 【Unity Shader】unity海边波浪效果的实现
- iOS应用间相互跳转
- python学习第六天
- 语言模型
- hbase系统架构图以及各部分的功能作用,物理存储,HBase寻址机制,读写过程,Regin管理,Master工作机制
- linux下 基于libmad的socket多用户mp3音频在线播放服务器
- unity shader 实现自由放大缩小效果
- vue.js+django开发租车系统
- Java,创建文件
- SpringBoot常用配置 application.yml /application.properties常用配置介绍
- Linux系统下安装MySQL的步骤详解
- 他山界面各版本介绍v1.9 ~ v52
- 人生在勤,不索何获
- linux命令间的逻辑关系
- 图片匹配(图片相似度对比)