往返移动亮带

10 / 14
用 sin(u_time) 让一条软边亮带左右往返移动。

一条亮黄色的竖带在画面中来回弹跳。让它动起来就靠这一行:

下面拆解每个部分。


用 sin 生成来回弹跳的位置

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

* 0.5 + 0.5 把它换算到 0.0~1.0,正好对应画面从左(0%)到右(100%)的位置。

这样 x 就是光带的当前中心位置,随时间在左右之间来回移动。


如何绘制光带

abs(vUv.x - x) 计算当前像素到光带中心的距离。

smoothstep(0.03, 0.06, d) 在距离 0.03 到 0.06 之间生成 0.0 到 1.0 的过渡:

  • 距离小于 0.03 → 输出 0.0(在带内)
  • 距离大于 0.06 → 输出 1.0(在带外)
  • 1.0 - ... 反转,让带内为 1.0(亮),带外为 0.0(暗)

最终颜色混合

m = 1.0 时(带内)显示亮黄色,m = 0.0 时(带外)显示深色背景。


试着改一改

改动效果
sin(u_time * 2.0)光带弹跳速度加倍
smoothstep(0.01, 0.015, d)光带变细,边缘更锐利
smoothstep(0.05, 0.15, d)光带变宽,边缘渐变更柔和
vUv.x 换成 vUv.y水平光带上下弹跳

练习

练习区的光带固定在画面中央,把 float x = 0.5 改成用 sin(u_time) 计算出来的值,让光带左右弹跳起来。

答案解析

  • sin(u_time) 产生 -1.0 到 1.0 的震荡
  • * 0.5 + 0.5 换算到 0.0~1.0,对应画面宽度

起始代码里 x = 0.5 是常量,光带永远在中间。换成 sin(u_time) * 0.5 + 0.5 后,x 随时间在 0 到 1 之间来回变化,光带就开始弹跳。

试着把 * 0.5 + 0.5 改成 * 0.3 + 0.5,光带的弹跳范围会缩小,只在画面中央附近来回。

GLSL 代码编辑器

正确代码预览

当前代码预览