波纹

14 / 14
将距离与时间结合到正弦波中,创建圆形波纹。

从中心向外扩散的波纹,像水面被投入石头。核心是这一行:

下面拆解每个部分。


以距离为自变量的波

d 是当前像素到画面中心(0.5, 0.5)的距离。

sin(12.0 * d) 以距离为横坐标,生成一圈圈同心的正弦波纹。12.0 控制频率——数字越大,圆环越密。


减去 u_time 让波向外传播

sin(12.0 * d - u_time * 3.0) 中,- u_time * 3.0 让相位随时间递减。

正弦波的"山峰"会不断向更大的 d 处移动,视觉上就是波纹向外扩散。3.0 控制传播速度——越大越快。

如果是 + u_time,波纹则向内收缩。


把波变成颜色

wave * 0.5 + 0.5 把 -1.0~1.0 的正弦值换算成 0.0~1.0,再用 mix 在深色和浅蓝之间插值,波峰处显示浅蓝,波谷处显示深色。


试着改一改

改动效果
12.0 改为 6.0波纹间距变宽
u_time * 3.0 改为 u_time * 8.0波纹传播更快
- u_time 改为 + u_time波纹向中心收缩
d - u_time 改为 d * d - u_time波纹向外越来越密

练习

练习区的 wave 固定为 0.0,画面是均匀的中间色。用 sin(12.0 * d - u_time * 3.0) 计算 wave,让波纹从中心向外扩散。

答案解析

  • 12.0 * d 以距离为自变量生成同心波纹
  • - u_time * 3.0 让波纹随时间向外传播
  • 结果是 -1.0 到 1.0 的值,代表每个像素处的波形高度

起始代码里 wave = 0.0 是常量,所以 t = 0.5,颜色固定在两色的中间值。换成 sin(12.0 * d - u_time * 3.0) 后,wave 随距离和时间变化,波纹就出现了。

试着把 12.0 改成 20.0,波纹会变得非常密,像细密的水波。

GLSL 代码编辑器

正确代码预览

当前代码预览