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.0
  • floor(2.0) 是 2.0
  • floor(-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,用浮点数。

相关函数

用到 floor() 的教程