进击的ShaderCocos Shader Effect 实现Sprite 滚动效果

CCEffect %{
  techniques:
  - passes:
    - vert: sprite-vs:vert
      frag: sprite-fs:frag
      depthStencilState:
        depthTest: false
        depthWrite: false
      blendState:
        targets:
        - blend: true
          blendSrc: src_alpha
          blendDst: one_minus_src_alpha
          blendDstAlpha: one_minus_src_alpha
      rasterizerState:
        cullMode: none
      properties:
}%

CCProgram sprite-vs %{
  precision highp float;
  #include <cc-global>

  in vec3 a_position;
  in vec2 a_texCoord; 
  
  out vec2 v_uv;

  vec4 vert () {
    vec4 pos = vec4(a_position, 1);

    //这个逻辑反向理解,从本地-》世界-》投影
    pos = cc_matProj * cc_matView * pos; 

    v_uv = a_texCoord;
    return pos;
  }
}%

CCProgram sprite-fs %{
  precision highp float;
  #include <cc-global> 
  in vec2 v_uv;

  #pragma builtin(local)
  layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture; 

  vec4 frag () {  
    //mod 函数返回0~10范围的数值,fract函数返回0~1范围的数值 ,cc_time.x表示游戏运行的时间,以秒为单位,小数点后精度到毫秒
    float offsetY = fract( mod(cc_time.x, 10.0) * 1.0);

    //uv取值范围实在 0~1 ,所有偏移值也取 0~1 之间
    vec2 v_uv = v_uv + vec2(0.0, offsetY );

    //根据uv信息,从纹理中取颜色信息
    vec4 color = texture(cc_spriteTexture, v_uv);  
    return color; 
  }
}%

保姆说流程

1、创建 材质着色器

请添加图片描述

2、 创建Sprite挂载着色器挂载纹理

请添加图片描述

3、 链接材质和着色器

请添加图片描述

4、把开头的代码替换到 effect2.effect 文件内

5、看效果