Shader "Custom/SinShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
// 該結構體爲傳遞給頂點shader所需的信息
struct appdata
{
// 綁定什麼語義,就會把什麼上一個頂點的什麼屬性傳過來
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
// 該結構體爲傳遞給片元shader所需的信息
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : POSITION ;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
// 計算當前的點和原點的距離
float dist = distance(v.vertex.xyz, float3(0,0,0));
// 根據當前的點,加時間延時,作爲一個符合sin變化的參數,將該值作爲起伏的高度
float height = sin(dist * 2 + _Time.z);
// 把當前的點變換到世界座標中
o.vertex = mul(unity_ObjectToWorld, v.vertex);
// 更改世界座標中的y值,也就是高度值
o.vertex.y = height;
// 將頂點的座標返回到局部座標
o.vertex = mul(unity_WorldToObject,o.vertex);
// 將局部座標設置乘以MVP矩陣
o.vertex = UnityObjectToClipPos(o.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
}