Shader08 Vertex Shader 几何变换 顶点扭曲,波

Shader "Sbin/Niuqu" {
	
	SubShader {	
		
		pass{	

			CGPROGRAM
			
			#pragma vertex vert
			#pragma fragment frag	 		
			
			//引用公用方法  Unity\Editor\Data\CGIncludes\sbin
			#include "unitycg.cginc"	
			
			struct v2f
			{
				float4 pos: POSITION;
				float4 color:COLOR;
			};
			   
			v2f vert(appdata_base v)
			{
				//float angle=length(v.Vertex);//取的是顶点位置和坐标中心的向量的长度

				Y轴扭曲
				//float4x4 m=
				//{
				//	float4{ cos(angle),0,sin(angle),0}*_SinTime.w,
				//	float4{ 0,1,0,0},
				//	float4{ sin(angle),0,cos(angle),0},
				//	float4{ 0,0,0,1}
				//};

				float angle=v.Vertex.z+_Time.y;
				//沿X轴缩放
				float4x4 m=	
				{
					float4(sin(angle)/8+0.5,0,0,0),
					float4(0,1,0,0),
					float4(0,0,1,0),
					float4(0,0,0,1)
				}

				m=mul(UNITY_MATRIX_MVP,m);//前面的作用于后面

				v2f o;
				o.pos=mul(m,v.vertex);//被变化的矩阵放右边
				o.color=fixed4(0,1,1,1);
				return o;				 
			}

			fixed4 frag(v2f IN):COLOR
			{	
				return IN.color;
			}
			
			ENDCG
		}
	} 
}

 

Shader "Sbin/Wava" 
{
	SubShader 
	{	
		pass
		{		
			CGPROGRAM
			
			#pragma vertex vert
			#pragma fragment frag	 		
			
			//引用公用方法  Unity\Editor\Data\CGIncludes\sbin
			#include "unitycg.cginc"
			
			struct v2f
			{
				float4 pos: POSITION;
				float4 color:COLOR;
			};
		
			   
			v2f vert(appdata_base v)
			{
				//A*sin(W*x+t)

				//沿X轴的波纹
				//v.Vertex.y+=0.2*sin(v.Vertex.x+_Time.y);
				//沿中心点向外阔的波纹
				//v.Vertex.y+=0.2*sin((-length(v.Vertex.xz)*2+_Time.y);

				//波浪
				v.Vertex.y+=0.2*sin((v.Vertex.x+v.vertex.z)+_Time.y);
				v.Vertex.y+=0.2*sin((v.Vertex.x-v.vertex.z)+_Time.w);

				v2f o;
				o.pos=mul(m,v.vertex);//被变化的矩阵放右边
				o.color=fixed4(0,1,1,1);
				return o;				 
			}

			fixed4 frag(v2f IN):COLOR
			{	
				return IN.color;
			}
			
			ENDCG
		}
	} 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值