顶点颜色变换
Shader "Sbin/vf33"
{
SubShader
{
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//引用公用方法 Unity\Editor\Data\CGIncludes\sbin
#include "unitycg.cginc"
float4x4 rm;//旋转矩阵
float4x4 sm;//缩放矩阵
float4x4 mvp;
struct v2f
{
float4 pos: POSITION;
float4 color:COLOR;
};
v2f vert(appdata_base v)
{
v2f o;
//o.pos=mul(mvp,v.Vertex);
//MVP变化 从模型到相机到投影 大部分用这个方法
float4x4 m=mul(UNITY_MATRIX_MVP,sm);
o.pos= mul(m,v.Vertex);//被变化的矩阵放右边
//if(v.vertex.x>0)
// o.color=fixed4(1,0,0,1);//显示红色
// else
// o.color=fixed4(0,0,1,1);//显示蓝色
//物体的侧面颜色
//if(v.vertex.x==0.5&&v.Vertex.y==0.5&&v.Vertex.z==0.5)
//o.color=fixed4(1,0,0,1);//显示红色
// else
//o.color=fixed4(0,0,1,1);//显示蓝色
//转化为世界坐标
float4 wpos=mul(_Object2World,v.Vertex);
//根据在世界坐标中的位置变换颜色
if(wpos.x>0)
//o.color=fixed4(1,0,0,1);//显示红色
//颜色可以随着时间变化
o.color=fixed4(_SinTime.w/2+0.5,_CosTime.w/2+0.5,_SinTime.y/2+0.5,1);
else
o.color=fixed4(0,0,1,1);//显示蓝色
return o;
}
fixed4 frag(v2f IN):COLOR
{
retu IN.color;
}
ENDCG
}
}
}
//红色光条移动
public class SetFloat : MonoBehaviour {
private float dis=-1;
private float r = 0.1f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
//红色光条从左向右移动
dis += Time.deltaTime;
GetComponent<Renderer>().material.SetFloat("dis", dis);
GetComponent<Renderer>().material.SetFloat("r", r);
}
}
//顶点位移
Shader "Sbin/vf34"
{
Properties
{
_R("R",Range(0,5))=1
_OX("OX",Range(-5,5))=0
}
SubShader
{
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//引用公用方法 Unity\Editor\Data\CGIncludes\sbin
#include "unitycg.cginc"
float _R;
float _OX;
float dis;
float r;
struct v2f{
float4 pos: POSITION;
float4 color:COLOR;
};
v2f vert(appdata_base v)
{
float4 wpos=mul(_Object2World,v.vertex);
float2 xy=wpos.xz;
float d=_R-length(xy-float2(_OX,0));//距离圆点的距离
d=d<0?0:d;
float height=1;//抬起的高度
float uppos=float4(v.vertex.x,height*d,v.Vertex.z,v.Vertex.w);//升高某一部分的位置
v2f o;
o.pos=mul(UNITY_MATRIX_MVP,uppos);//被变化的矩阵放右边
//float x=o.pos.x/o.pos.w;
//if(x>dis&&x<dis+r)
// o.color=fixed4(1,0,0,1);
//else
// o.color=fixed4(x/2+0.5,x/2+0.5,x/2+0.5,1);
o.color=fixed4(uppos.y,uppos.y,uppos.y,1);
return o;
}
fixed4 frag(v2f IN):COLOR
{
retu IN.color;
}
ENDCG
}
}
}