Unity shader實(shí)現(xiàn)自由放大縮小效果
本文實(shí)例為大家分享了Unity shader實(shí)現(xiàn)自由放大縮小效果的具體代碼,供大家參考,具體內(nèi)容如下

代碼:
以下實(shí)現(xiàn)的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
}
}
}
主要的內(nèi)容還是在frag中。
下面是掛在攝像機(jī)上的腳本:
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);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity shader實(shí)現(xiàn)消融效果
- Unity Shader實(shí)現(xiàn)序列幀動(dòng)畫效果
- Unity3D中shader 輪廓描邊效果實(shí)現(xiàn)代碼
- unity shader實(shí)現(xiàn)玻璃折射效果
- Unity Shader實(shí)現(xiàn)玻璃材質(zhì)效果
- Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果
- Unity Shader實(shí)現(xiàn)描邊OutLine效果
- Unity3D Shader實(shí)現(xiàn)貼圖切換效果
- Unity shader實(shí)現(xiàn)遮罩效果
- 淺談Unity中的Shader
相關(guān)文章
C#實(shí)現(xiàn)條形碼識(shí)別的解決方案分享
主流的識(shí)別庫(kù)主要有ZXing.NET和ZBar,OpenCV 4.0后加入了QR碼檢測(cè)和解碼功能,所以本文主要和大家分享了使用ZBar進(jìn)行條形碼識(shí)別的示例代碼,需要的可以參考一下2023-07-07
動(dòng)態(tài)webservice調(diào)用接口并讀取解析返回結(jié)果
webservice的 發(fā)布一般都是使用WSDL(web service descriptive language)文件的樣式來(lái)發(fā)布的,在WSDL文件里面,包含這個(gè)webservice暴露在外面可供使用的接口。今天我們來(lái)詳細(xì)討論下如何動(dòng)態(tài)調(diào)用以及讀取解析返回結(jié)果2015-06-06
C#判斷程序是否是管理員權(quán)限運(yùn)行的方法代碼示例
這篇文章主要介紹了C#判斷程序是否是管理員權(quán)限運(yùn)行的方法代碼示例,本文直接給出實(shí)現(xiàn)代碼例子,需要的朋友可以參考下2015-03-03
C#模擬MSN窗體抖動(dòng)的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#模擬MSN窗體抖動(dòng)的實(shí)現(xiàn)代碼,非常實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-08-08
adonet基礎(chǔ)示例分享(adonet連接數(shù)據(jù)庫(kù))
這篇文章主要介紹了adonet基礎(chǔ)示例分享(adonet連接數(shù)據(jù)庫(kù)),需要的朋友可以參考下2014-04-04
C#游戲開(kāi)發(fā)之實(shí)現(xiàn)俄羅斯方塊游戲
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01

