Shader中顶点片段级

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方法 :求一个顶点到中心的距离。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值