融球效果(shader)

元球也叫融球,它能够让两个球体产生“黏糊糊”的效果,是流体、融合等效果的实现基础,异名这次实现的demo是一个固定的大圆,然后手指控制一个游离态的小圆,它们靠近的时候会产生融合的效果

demo

实现思路

Metaballs在数学上是一个求等势面的公式,两个球体之间的等势面为E = R² / (△x² + △y²)

float energy(float r, vec2 point1, vec2 point2) {
  return (r * r) / ((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y));
}

demo的实现很简单,固定的圆处于中心的位置,加大一下半径,求出它的等势面energy(u_radius + 0.1, v_uv0.xy, vec2(0.5)),然后我们在手指的落足点再生成一个等势面energy(u_radius, v_uv0.xy, u_point),然后叠加它们,让处于等势面上的点的色值透明度为1,不在该等势面上的透明度为0就可以达到视觉中的球体融合效果:

void main(){
  vec4 color = texture(texture, v_uv0);

  float fragEnergy = energy(u_radius + 0.1, v_uv0.xy, vec2(0.5)) + energy(u_radius, v_uv0.xy, u_point);
  color.a = smoothstep(0.95, 1.0, fragEnergy);
  gl_FragColor = color;
}
demo

这个demo效果异名记得是在一个记账软件上看到的,然后念念不忘,如果你是有心人,你会发现cocos Creator官网的loading动画也是两个球体之间来回改变位置的metaball动画。再拓展一下,如果我们的页面上有更多的小球,让它们互相叠加融球效果,那就可以产生出流体的效果了,异名接下来会抽空实现喔

效果预览

源码获取请点击查看原文,长按二维码查看效果????

ewm

 

溶解效果(shader)   追光效果(shader)   

放大镜效果     微信小游戏首包超出4M之后  

移动残影效果    刮刮卡实现    子弹跟踪效果

遥控杆实现    背景无限滚动   镜面光泽效果(shader)

金币落袋效果    富文本打字机效果

圆形头像(shader)   Cocos游戏开发入门最佳实践

使用cocos进行2D和3D混合开发 

水波扩散效果(shader)    颜色滤镜

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值