GLSL 内置函数
abs()
返回 x 的绝对值:负数变成正数,正数保持不变。
函数签名
float abs(float x)
vec2 abs(vec2 x)
vec3 abs(vec3 x)
vec4 abs(vec4 x)参数
- x
- 要取绝对值的数。传入向量时,每个分量分别计算。
返回值
与 x 类型相同的值,每个分量都大于等于 0。
在线示例
修改右侧代码,左侧预览会实时更新。
工作原理
abs(x) 会去掉负号。abs(-0.7) 是 0.7,abs(0.7) 也是 0.7。
在以画布中心为原点的坐标里(p 从 -1 到 1),abs(p.x) 在中间是 0,越往左右两边越大。原本一条斜坡就变成了 V 字形,示例画出的正是这个 V。
float y = abs(p.x); // 左边缘 1.0,中心 0.0,右边缘 1.0
常见用法
- 镜像对称:
abs(p.x)把画布左半边折到右半边,画一个图形会同时出现两份。 - 到直线的距离:
abs(p.y - 0.3)就是像素到水平线y = 0.3的距离。 - 方形轮廓:
max(abs(p.x), abs(p.y))得到正方形等值线,是矩形 SDF 的基础。
常见错误
- 在 GLSL ES 1.0 里对整数用
abs:要写abs(-1.0)而不是abs(-1),因为没有整数版本。 - 没有先把坐标移到中心。
uv本身在 0 到 1 之间,全是正数,abs(uv.x)不会有任何变化。