Unity shader实现自由放大缩小效果
作者:clzmin 时间:2022-04-05 06:50:46
本文实例为大家分享了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);
}
}
来源:https://blog.csdn.net/clzmin/article/details/73696551
标签:Unity,shader,放大,缩小
0
投稿
猜你喜欢
Java编程二项分布的递归和非递归实现代码实例
2023-08-07 09:38:04
Java的字符串中对子字符串的查找方法总结
2022-12-16 17:16:31
java实现马踏棋盘的算法
2023-11-29 17:00:29
java实现Socket通信之单线程服务
2022-08-24 14:41:06
关于Intellij IDEA中的Version Control问题
2021-12-27 08:42:01
Java的“Goto”与标签及使用详解
2023-11-11 03:56:09
Android中Spinner(下拉框)控件的使用详解
2021-08-09 01:46:28
使用 C# 下载文件的多种方法小结
2023-11-08 06:59:37
springboot编程式事务TransactionTemplate的使用说明
2022-03-01 15:19:37
解决ThingsBoard编译报错问题:Failure to find org.gradle:gradle-tooling-api:jar:6.3
2021-11-20 16:24:22
Ribbon单独使用,配置自动重试,实现负载均衡和高可用方式
2023-05-12 00:49:15
Java中的守护线程问题
2023-09-13 11:49:23
C#飞行棋小程序设计分析
2023-06-05 05:27:24
Springboot集成ClickHouse及应用场景分析
2022-04-02 16:28:46
基于C#实现获取本地磁盘目录
2021-08-21 12:51:43
Idea配置超详细图文教程(2020.2版本)
2023-03-13 21:41:04
Java拷贝数组方法Arrays.copyOf()是地址传递的证明实例
2023-11-08 11:51:29
Android系统制作自定义签名的例子
2023-02-02 05:10:04
jvm细节探索之synchronized及实现问题分析
2023-08-24 02:13:29
互斥量mutex的简单使用(实例讲解)
2023-09-20 21:36:50