Mosaic changing by time

20231206-Shader-Mosaic-马赛克

Posted by 曹福磊 on Wednesday, December 6, 2023

Mosaic By Time

随着时间更新马赛克的大小

ShaderToy https://www.shadertoy.com/view/DlKBRh

Code:

/*
https://www.shadertoy.com/view/DlKBRh
Blog:https://blog.lovezjj.cn
by cfl997 20231206
*/

// 定义一个变量 Square,表示一个正方形的尺寸
float Square = 80.0;

// 主函数,负责计算每个像素的颜色值
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
    // 计算纹理坐标(uv坐标),将屏幕像素坐标转换为[0,1]范围内的坐标
    vec2 uv = fragCoord / iResolution.xy;

    // 计算时间(以秒为单位),并对其取模,使其在一个固定的范围内循环
    float time = mod(iTime, 10.0);

    // 计算一个计数值,用时间乘以Square变量
    float count = time * Square;

    // 将uv坐标乘以count,然后取整数部分,再除以count,实现对uv坐标的分块效果
    uv = floor(uv * count) / count;

    // 从纹理中获取颜色值,并赋值给fragColor
    fragColor = texture(iChannel0, uv);
    // 另一种获取颜色值的方式,使用textureLod函数,并指定mipmap级别为0.0f
    // fragColor = textureLod(iChannel0, uv, 0.0f);
}

If the channel filter is set to NEAREST or LINEAR, texture can be used directly, otherwise textureLod needs to be used. Otherwise there will be a border in the view.

如果通道过滤设置为:最近点(NEAREST)或线性(LINEAR),那么可以直接使用texture,否则需要使用textureLod。不然视图上会有边框。

「真诚赞赏,手留余香」

Caofulei

真诚赞赏,手留余香

使用微信扫描二维码完成支付