Opengl GLSL的连锁反应需要澄清

Opengl GLSL的连锁反应需要澄清,opengl,glsl,effects,Opengl,Glsl,Effects,我一直在经历简单的水涟漪效应。这确实给了我们一个机会。但我不明白的是这行代码 vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03; 我不明白数学是如何翻译成这句话的,并取得如此好的连锁反应。我需要帮助解密这条线背后的逻辑 vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength

我一直在经历简单的水涟漪效应。这确实给了我们一个机会。但我不明白的是这行代码

vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
我不明白数学是如何翻译成这句话的,并取得如此好的连锁反应。我需要帮助解密这条线背后的逻辑

vec2 uv = gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12.0-iGlobalTime*4.0) * 0.03;
为了理解这个等式,让我们把它分解成几部分,然后把它们连接起来

gl_FragCoord.xy/iResolution.xy
  • gl_FragCoord.xy从(0,0)到(xRes,yRes)变化
  • 我们将除以决议iResolution.xy
  • 所以“gl_FragCoord.xy/iResolution.xy”的范围从(0,0)到(1,1)
  • 这是您的像素坐标位置
  • 因此,如果你给出“vec2uv=gl_FragCoord.xy/iResolution.xy”,它将只是一个静态图像
(cPos/cLength)

  • CPO的范围为(-1,-1)到(1,1)
  • 假设一个原点位于中心且CPO为从原点指向当前像素的向量的2D平面
  • cLength将给出距离中心的距离
  • “cPos/cLength”是单位向量
  • 我们寻找单位向量的目的是找到像素必须被轻推的方向
vec2紫外线= gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(iGlobalTime)

  • 该方程将沿方向向量(单位向量)微移每个像素。但是所有的波都是沿着方向向量以相干性推进的。效果看起来像是图像在膨胀和收缩

  • 为了得到波效应,我们必须引入相移。在波中,每个粒子处于不同的相位。这可以由cos(CLENGHT*12 iGlobalTime)引入

    • 这里每个像素的长度都不同。所以我们取这个值,把它当作像素的相位
    • 乘以12是为了放大效果
vec2紫外线= gl_FragCoord.xy/iResolution.xy+(cPos/cLength)*cos(cLength*12-iGlobalTime*4.0)

  • 将iGlobalTime乘以4.0将加快波浪速度

  • 最后,将余弦积乘以0.03,在(-0.03,0.03)范围内移动最大像素,因为在(-1,1)范围内移动像素看起来很奇怪

这就是整个方程