我一直在经历this blog的简单水波纹效应。确实给出了nice ripple effect。但我不明白这就是这行代码
vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
我不明白数学如何转化为这一行,并实现了很好的连锁反应。我需要帮助解密这一行背后的逻辑。
答案 0 :(得分:5)
vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
要理解这个等式,我们可以将它分解成碎片,然后加入它们。
gl_FragCoord.xy/iResolution.xy
(CPOS / cLength)
vec2 uv = gl_FragCoord.xy / iResolution.xy +(CPOS / cLength)* COS(iGlobalTime);
此等式将沿方向向量(单位向量)微移每个像素。但是所有的波都是沿着方向向量一致地推动的。效果看起来像是图像正在扩展和收缩。
为了获得波浪效应,我们必须引入相移。在波浪中,每个粒子都处于不同的相位。这可以通过cos(cLength * 12-iGlobalTime)引入。
vec2 uv = gl_FragCoord.xy / iResolution.xy +(CPOS / cLength)* COS(cLength * 12-iGlobalTime * 4.0);
将iGlobalTime与4.0相乘会加快波浪速度。
最后将余弦乘积乘以0.03,将像素移动到范围(-0.03,0.03)的最大值,因为在(-1,1)范围内移动像素看起来很奇怪。
这就是整个方程式。