中心圆遮罩

7 / 18
使用 distance() 创建一个以画布中心为圆心的遮罩区域。

用距离和 step 判断每个像素是否在圆内:

下面拆解它。


distance 计算距离

distance(a, b) 返回两点的直线距离。

distance(vUv, vec2(0.5, 0.5)) 就是每个像素到画面中心的距离:

  • 中心像素 distance = 0
  • 半径 0.3 处的像素 distance = 0.3
  • 角落附近 distance ≈ 0.7

step 生成硬边遮罩

step(edge, x) 的判断规则是:x < edge 返回 0,x ≥ edge 返回 1。

这里用的是 step(dist, radius) ——注意参数顺序:

  • dist < radius → step 返回 1(在圆内)
  • dist ≥ radius → step 返回 0(在圆外)

结果是一个硬边圆形遮罩:圆内为 1,圆外为 0。


mix 把遮罩变成颜色

  • inside = 1(圆内)→ 显示暖黄色 vec3(1.0, 0.8, 0.2)
  • inside = 0(圆外)→ 显示黑色 vec3(0.0)

试着改一改

改动效果
radius0.3 改成 0.15圆变小
center 改成 vec2(0.3, 0.7)圆心移到左上角
step(dist, radius) 改成 1.0 - step(dist, radius)圆内变黑,圆外变黄
smoothstep(radius - 0.01, radius + 0.01, dist) 替换边缘变成柔和过渡

练习

定义中心点和半径,用 distance 计算距离,用 step 生成遮罩,再用 mix 混合颜色后输出。

答案解析

distance(vUv, center) 算出每个像素到中心的距离。step(dist, radius) 判断该距离是否在半径以内——小于 radius 返回 1(圆内),大于等于返回 0(圆外)。mix 用这个 0/1 遮罩在黑色和黄色之间切换。

练习是空的 main(),需要从头补全六行代码。

试着把 step 换成 1.0 - smoothstep(0.29, 0.31, dist) 看看边缘软化的效果。

GLSL 代码编辑器

正确代码预览

当前代码预览