一个笑脸

没什么可说的,很简单通过拼凑出一个笑脸。

 

通过smoothstep抗锯齿,在圆的边界a值有一个平滑的过渡,而不是0-1的尖锐变化;

控制vec4 fragColor.a来表现透明通道,圆的区域和其他区域唯一的区别就是a值不同;

通过mix来实现图层融合,第二个参数为上层的图层,原理是mix(a,b,t)的返回值是 a(1-t)+bt , 在此处t=a , 将导致b图层有图像的地方(圆的绘制区域a为1)将会覆盖a图层中该范围的颜色信息;

vec4 Circle(vec2 uv,float radius,vec2 orign,float blur,vec3 color)
{
    float d = length( uv - orign );
    float c = smoothstep( radius,radius - blur,d );
    vec4 fragcolor = vec4(color,c);
    return fragcolor;
    
}


void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord/iResolution.xy;
    uv -=0.5;
    uv.x *= iResolution.x/iResolution.y;

    vec4 layer1 = Circle(uv , 0.25 , vec2(0,0) , 0.01 , vec3(1.,1.,0.));
    vec4 layer2 = Circle(uv , 0.2 , vec2(0.,-0.001) , 0.01, vec3(0.,0.,0.));
    vec4 layer3 = Circle(uv , 0.22 , vec2(0,0.03) , 0.01 , vec3(1.,1.,0.));
    vec4 layer4 = Circle(uv , 0.05 , vec2(0.1,0.1) , 0.01, vec3(0.,0.,0.));
    vec4 layer5 = Circle(uv , 0.05 , vec2(-0.1,0.1) , 0.01, vec3(0.,0.,0.));
    
    
    fragColor = mix(fragColor,layer1,layer1.a);
    fragColor = mix(fragColor,layer2,layer2.a);
    fragColor = mix(fragColor,layer3,layer3.a);
    fragColor = mix(fragColor,layer4,layer4.a);
    fragColor = mix(fragColor,layer5,layer5.a);
    
}

链接在此: https://www.shadertoy.com/view/fssGWj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值