最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    正文概述 掘金(ShaderJoy)   2021-08-16   588

    这是我参与8月更文挑战的第16天,活动详情查看: 8月更文挑战

    效果图

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    算法简介

    首先,是常规操作,将 uv 坐标换算到 [-0.5, 0.5] 之间

    vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
    

    uv 可视化后的效果 ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    下一步,就是如何绘制圆

    float circle = length(uv) - 0.23;  
    

    圆的函数示意图

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    实际效果图为

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    以及如何绘制矩形

     float rect =  max(abs(uv.x), abs(uv.y)) - 0.1; 
    

    矩形的函数示意图

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    实际效果为

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    下一步,我们需要设计一个缓动函数,来对圆和矩形进行平滑切换

    float w = -sin(t + sin(t + sin(t))) * 0.5 + 0.5;
    

    其函数示意图为

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    则 w 的值域就在 [0., 1.] 之间随着时间而变化了(t 是伴随时间变化的量)

    采用 mix 函数来插值

    float f = mix(circle, rect, w);
    

    动态的效果如下

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    最后,为了显示为线条形状,我们使用 smoothstep 函数来(平滑地)截取出我们想要的一段数值

    f = smoothstep(0.0, -0.01, f) - smoothstep(-0.01, -0.02, f);
    

    上式的减号左侧示意图为

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    上式的减号右侧示意图为

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    合并起来以后就截取出了其中一段(太大、太小都被抑制)

    ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    至此我们就得到了如文章开头的效果

    完整代码与注释

    void mainImage( out vec4 fragColor, in vec2 fragCoord )
    {
        vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
        float t = iTime * 3.;
    
        float circle = length(uv) - 0.23;               ///< 圆的绘制
        float rect =  max(abs(uv.x), abs(uv.y)) - 0.1;  ///< 矩形的绘制
    
        /// @note 插值比例,0: circle, 1: rect
        float w = -sin(t + sin(t + sin(t))) * 0.5 + 0.5;
        /// @note 缓动插值
        float f = mix(circle, rect, w);
    
        f = smoothstep(0.0, -0.01, f) - smoothstep(-0.01, -0.02, f);
        vec3 col = vec3(f);
        fragColor = vec4(col, 1.0);
    }
    

    起源地下载网 » ShaderJoy —— 方方圆圆?圆圆方方?【GLSL】

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元