Cocos Creator 2.1 shader / 材质 使用

2020-01-18  本文已影响0人  小_黑_屋

这里制作了一个按钮流光特效

流光特效.gif

制作流程

void main () {
  vec4 color = v_color;

  #if USE_TEXTURE
    color *= texture2D(texture, v_uv0);
    #if _USE_ETC1_TEXTURE
      color.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
    #endif
    float y1 = -1.0 * tan_value * (v_uv0.x - start_x);
    float y2 = -1.0 * tan_value * (v_uv0.x - start_x - light_width);



    if (v_uv0.y > y1 && v_uv0.y < y2) {
      //计算现在的点到中心线的距离
      float dis = v_uv0.y * -1.0 / tan_value + (light_width / 2.0) + start_x - v_uv0.x;
      if (dis < 0.0) {
        dis = dis * -1.0;
      }

      //距离所占比例
      // * 1.0 后变为透明度  所以本身就是透明度
      float sc = dis / (light_width / 2.0);
  
      //计算光的透明度  营造光晕效果
      // 中间不透明   两边透明
      //用 sin 来达成先快后慢的变化效果
      float lightA = (1.0 - sin(sc * 3.1415926536 / 2.0)) * light_strength;

      float newr = color.r * (1.0 - lightA) + 255.0 * lightA;
      float newg = color.g * (1.0 - lightA) + 255.0 * lightA;
      float newb = color.b * (1.0 - lightA) + 255.0 * lightA;      
      float newa = color.a * (1.0 - lightA) + 1.0 * lightA;


      color = vec4(newr, newg, newb, newa);
    }
  #endif


  gl_FragColor = color;
}

流光特效

小结

上一篇下一篇

猜你喜欢

热点阅读