【进击的Shader】【入门一】Cocos 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、看效果

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现搓牌效果可以使用Cocos Creator的js shader来完成。首先,我们需要创建一个自定义的shader,将其应用到牌的渲染组件上。可以通过编辑顶点和片段着色器来实现搓牌的效果。 首先,定义一个变量来控制搓牌的进度。可以通过在脚本中设置一个初始值,然后在每一帧更新该值,以模拟手指滑动搓牌的效果。 然后,在顶点着色器中,对牌的每个顶点进行偏移操作。根据搓牌的进度值,调整顶点的位置,使之呈现出搓牌的形态。可以使用简单的插值方法(如线性插值),计算出每个顶点新的位置。 接下来,在片段着色器中,根据顶点的位置信息,设置每个像素的颜色值。可以使用纹理坐标来采样牌的纹理图片,根据搓牌的进度值,调整采样的坐标,以实现搓牌的效果。 最后,在每一帧更新搓牌的进度值,并将其传递给shader,更新牌的渲染效果。可以通过设置shader的uniform变量,将进度值传递给shader。 总结起来,使用Cocos Creator的js shader实现搓牌效果的步骤如下: 1. 创建自定义的shader,定义搓牌的进度变量。 2. 在顶点着色器中根据进度值调整顶点位置。 3. 在片段着色器中根据进度值调整纹理采样坐标。 4. 在每一帧更新进度值,并将其传递给shader。 5. 应用shader到牌的渲染组件上,实现搓牌效果。 希望这个简单的解答对你有帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值