波纹
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,波纹会变得非常密,像细密的水波。