Advertisement

shader 动画之 loading 特效! Cocos Creator !

阅读量:

手把手带你玩转 shader 动画!!文末视频讲解+完整代码。

效果预览

实现步骤

准备阶段

为了制作动画时需要用到纹理中的uv坐标。特别注意的是,在Cocos Creator的Sprite组件中设置了uv坐标。

并且,sprite 组件需要有spriteFrame时,才会有uv坐标。

我们就用新建项目后,这个自带的资源作为 spritespriteFrame 吧。

需要注意的是,在移除该资源的Packable参数后可防止出现uv坐标不正确的错误情况

接着创建 effect 节点,并生成 material 材质参数以及 sprite 精灵节点。随后将这些效果与材质和图形元素进行连接。

画一个圆

编辑刚刚创建好的 effect , 开始编写。

uv 坐标系的原点在这里是左上角,u轴向右,v轴向下,范围是0~1

一般会把uv坐标范围转成-0.5~0.5这个范围。这样,图片的正中心刚好是(0,0)

复制代码
    vec2 uv = v_uv0 - 0.5;

通过内置函数 lengthstep 可以帮助我们画一个圆。

让距离中心距离小于0.2的点的alpha值设为1.0,代码如下。

复制代码
 vec4 o = vec4(1, 1, 1, 1);

    
 vec2 uv = v_uv0 - 0.5;
    
 o.a = 1.0 - step(0.2, length(uv));
    
 gl_FragColor = o;

这看起来有点锯齿,可以用 smoothstep 消除锯齿。

复制代码
 float radius = 0.2;

    
 o.a = 1.0 - smoothstep(radius-0.01*radius, radius+0.01*radius, length(uv));

把圆围成一个圈

先看看怎么平移这个圆。

只需要减去一个坐标,就会往右下角移动。

可以把画一个圆封装成一个方法。

复制代码
 float circle(in vec2 uv, in float radius){

    
     return 1.0 - smoothstep(radius-0.01*radius, radius+0.01*radius, length(uv));
    
 }

接着,在页面上绘制一组圆,并将这些圆排列成一个环状结构。如果将这个环均分为若干等分,则每个分割点对应一个角度值。根据所设定的半径以及对应的中心角的角度大小关系,则能够计算出各个偏移坐标的具体数值。

复制代码
 float R = 0.35;

    
 float radius = 0.05;
    
 vec2 pos = vec2(0.0);
    
 float rotation = 0.0;
    
 const float count = 8.0;
    
  
    
 for(float i = 0.0; i<count; i++){
    
     rotation = 2.0*PI*i/count;
    
     pos = vec2(R*cos(rotation), R*sin(rotation));
    
     o.a += circle(uv-pos, radius);
    
 }

动起来

cocos creator 中内置了一个 cc_time 变量,表示运行了多少秒。

复制代码
    float time = cc_time.x;

利用这个时间参数,我们可以给角度添加一个时间变化。

复制代码
    rotation = 2.0*PI*i/count + time*2.0*PI/5.0;

当然还可以添加一些颜色,大小的变化。

复制代码
 rotation = 2.0*PI*i/count + time*2.0*PI/4.0;

    
 pos = vec2(R*cos(rotation), R*sin(rotation));
    
 o.a += circle(uv-pos, radius * (sin(rotation*0.45)+1.0)/3.0 + radius/3.0);
    
 o.r += o.a * (sin(i/count + time + PI*6.0/3.0)+ 1.0)/2.0;
    
 o.g += o.a * (sin(i/count + time + PI*4.0/3.0)+1.0)/2.0;
    
 o.b += o.a * (sin(i/count + time + PI*2.0/3.0)+1.0)/2.0;

小结

动手实践!在实践中成长!在模仿中学习!

简述其实现步骤如下:第一步绘制一个静止的圆形;第二步绘制多个同心圆;第三步动态调整各圆的位置,并依据时间参数进行实时更新。

本人记录了自己在Cocos Creator v2.3.3环境下进行技术探索的过程——具体实现了"shader 动画之 loading"功能的技术分享。

****

****

****

****

2019年精选作品!提供 GitHub 链接! #wechat_redirect

游戏娱乐:《不停歇的小球》——深度解析:关键技术探讨 源代码奉上

JavaScript 中的三位一体

欢乐水杯流体实现!

该抛物线上焦点定位的呈现方式!

此等实体以抛掷式移动

探索贪吃蛇游戏世界:深入解析蛇类角色的路径规划与代码实现

雷达图的一种实现!

分形着色器!

shader 编程入门实战 !

转载请保留文末二维码和完整代码获取方式!

完整代码: https://github.com/baiyuwubing/cocos-creator-examples/tree/master/shader_animation

点击“阅读原文”查看完整代码

我就知道你“在看”▼

全部评论 (0)

还没有任何评论哟~