Abh*_*sal 3 opengl effects glsl
我一直在浏览这个博客,以获得简单的水波纹效果.它确实给出了一个很好的连锁反应.但是我不明白这就是这行代码
vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
Run Code Online (Sandbox Code Playgroud)
我不明白数学如何转化为这条线,并实现了很好的连锁反应.我需要帮助来解密这一行背后的逻辑.
vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
Run Code Online (Sandbox Code Playgroud)
要理解这个等式,我们可以将它分解成碎片然后加入它们.
gl_FragCoord.xy/iResolution.xy
Run Code Online (Sandbox Code Playgroud)
(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)范围内移动像素看起来很奇怪.
这就是整个方程式.