时间脉冲

1 / 14
使用 sin(u_time) 创建亮度脉冲动画。

画面里的蓝色在不停地变亮、变暗,像心跳一样。实现它只需要一行:

下面拆解每个部分。


把 sin 的输出变成亮度

sin(u_time) 的输出在 -1.0 到 1.0 之间震荡。

* 0.5 + 0.5 是一个标准的换算公式,把 -1.0~1.0 压缩并平移到 0.0~1.0:

  • sin 是 -1.0(最低)→ -1.0 * 0.5 + 0.5 = 0.0(0%)
  • sin 是 0.0(中间)→ 0.0 * 0.5 + 0.5 = 0.5(50%)
  • sin 是 1.0(最高)→ 1.0 * 0.5 + 0.5 = 1.0(100%)

如何用 pulse 控制亮度

base 是目标颜色(蓝色偏亮)。乘以 (0.2 + 0.8 * pulse) 控制它的整体亮度:

  • pulse 为 0 时,亮度因子是 0.2,颜色保留 20% — 不会完全黑掉
  • pulse 为 1 时,亮度因子是 1.0,颜色是 100%

这样脉冲会在「很暗」和「全亮」之间循环,而不是「全黑」到「全亮」。


试着改一改

改动效果
sin(u_time * 3.0) * 0.5 + 0.5心跳速度变快
sin(u_time * 0.5) * 0.5 + 0.5非常缓慢的呼吸
0.0 + 1.0 * pulse(替换 0.2 + 0.8从全黑跳到全亮,对比更强烈
base 改为 vec3(0.95, 0.15, 0.25)变成红色脉冲

练习

练习区的脉冲值固定为 1.0,画面常亮不变,用 sin(u_time) 生成正确的 pulse 值让它动起来。

答案解析

  • sin(u_time) 产生 -1.0 到 1.0 的震荡
  • * 0.5 + 0.5 将范围换算为 0.0 到 1.0

起始代码里 pulse = 1.0 是一个常量,所以亮度因子始终是 0.2 + 0.8 * 1.0 = 1.0,画面不变。换成 sin(u_time) * 0.5 + 0.5 后,pulse 开始在 0 到 1 之间变化,亮度随之起伏。

试着把 0.2 + 0.8 * pulse 改成 0.4 + 0.6 * pulse,让暗部更亮,脉冲感更柔和。

GLSL 代码编辑器

正确代码预览

当前代码预览