GLSL 内置函数
min()
返回 x 和 y 中较小的那个。传入向量时,逐个分量比较。
函数签名
float min(float x, float y)
vec2 min(vec2 x, vec2 y)
vec2 min(vec2 x, float y)
vec3 min(vec3 x, vec3 y)
vec3 min(vec3 x, float y)参数
- x
- 第一个值。
- y
- 第二个值。x 是向量时,y 也可以是单个浮点数。
返回值
较小的那个值,类型与 x 相同。
在线示例
修改右侧代码,左侧预览会实时更新。
工作原理
min(x, y) 返回两者中较小的那个。min(0.3, 0.8) 是 0.3。
它在有符号距离场(SDF)里最有用:距离小于 0 表示"在图形内部"。对两个距离取 min,像素只要在任意一个图形里就算在内部,所以示例画出的是两个圆的并集。右边的圆来回移动时,重叠的部分会合并成一个整体轮廓。
float d = min(da, db); // 两个图形的并集
常见用法
- 合并图形:
min(sdfA, sdfB)就是 A 和 B 的并集。 - 设上限:
min(brightness, 1.0)让数值不超过 1.0。 - 找最近的点:循环遍历多个点,保留
min(d, distance(p, point)),就能找到最近的那个,这是 Voronoi 图案的核心。
常见错误
- 想用
min同时限制上下限。那需要clamp(x, lo, hi),它等于min(max(x, lo), hi)。 - 以为向量版
min会挑出"较小的向量"。min(vec2(1.0, 0.0), vec2(0.0, 1.0))的结果是vec2(0.0, 0.0),因为每个分量单独比较。