Shader中的模型顶点,默认使用的是自身坐标系。
例 :
struct v2f {
float4 pos : POSITION;
fixed4 color : COLOR;
}
v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP , v.vertex);
(1)、
if(v.vertex.x > 0)
o.color = fixed(1,0,0,1);
else
o.color = fixed4(1,0,0,1); // 此时呈现的立方体一半是红色,一半是蓝色,拖动改变位置,或者旋转都是一半红色,一半蓝色。因为使用的是自身坐标系, // 顶点位置是不会改变的
}
(2)、
if(v.vertex.x == 0.5 && v.vertex.y == 0.5 && v.vertex == -0.5)
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);
// _SinTime.w 的范围是 -1~1,超出了颜色值的取值范围,所以需要作一下适配,将取值范围变为0~1,达到随时间变化改变颜色的效果
(3)、_Object2World :为了把物体顶点坐标从自身坐标系转换为世界坐标系坐标而使用的矩阵
float4 wpos = mul(_Object2World , v.vertex); // 将模型顶点的坐标从自身坐标系转换为世界坐标系中
if(wpos.x > 0)
o.color = fixed4(1,0,0,1);
else
o.color = fixed4(0.0.1.1);
// 此时顶点的坐标位置处于世界坐标系中,拖动物体或者旋转物体,改变模型位置,物体的颜色会被改变
(4)、屏幕坐标 :使用透视除法进行操作
o.pos = mul(UNITY_MATRIX_MVP , v.vertex);
float x = o.pos.x / o.pos.w; // 透视除法,得到的x值为屏幕坐标上的x值
if(x <= -1)
o.color = fixed4(1,0,0,1); // 屏幕左侧
else if(x >= 1)
o.color = fixed4(0,0,1,1); //屏幕右侧
else
o.color = fixed4(x / 2 + 0.5 , x / 2 + 0.5 , x / 2 + 0.5 , 1);
// 一个描述灰度变化,一个对边界的检查
屏幕坐标的好处 :改变摄像机的位置,即可改变物体在屏幕中显示的颜色
length方法 :求一个顶点到中心的距离。