GLSL 内置函数
floor()
把 x 向下取整,得到不大于 x 的最大整数。
函数签名
float floor(float x)
vec2 floor(vec2 x)
vec3 floor(vec3 x)
vec4 floor(vec4 x)参数
- x
- 要向下取整的数。传入向量时,每个分量分别计算。
返回值
与 x 类型相同的值,内容是整数(仍以浮点数存储)。
在线示例
修改右侧代码,左侧预览会实时更新。
工作原理
floor(x) 丢掉小数部分,并且总是向下取整:
floor(2.7)是2.0floor(2.0)是2.0floor(-0.3)是-1.0(向下取,不是向 0 取)
先乘再除可以控制台阶数量。floor(x * 4.0) / 4.0 会把 x 对齐到 0.25 的倍数,也就是示例里的阶梯。
常见用法
- 网格编号:
floor(uv * 10.0)得到像素位于 10 x 10 网格中的哪一格,再交给随机函数,就能给每一格不同的颜色。 - 色阶化:
floor(color * 4.0) / 4.0把平滑的渐变压成 4 档。 - 按帧跳动:
floor(u_time * 12.0)每秒只变化 12 次,做出定格动画的效果。
常见错误
- 以为负数会向 0 取整。
floor(-0.3)是-1.0。需要截断时用sign(x) * floor(abs(x))。 - 拿结果和整数字面量比较。要写
floor(x) == 2.0,用浮点数。