GLSL 内置函数

acos()

返回余弦值为 x 的弧度角。acos(dot(a, b)) 可以得到两个单位向量之间的夹角。

函数签名

float acos(float x)
vec2 acos(vec2 x)
vec3 acos(vec3 x)

参数

x
-1.0 到 1.0 之间的值。

返回值

0.0 到 PI 之间的角度(0 到 180 度)。

在线示例

修改右侧代码,左侧预览会实时更新。

工作原理

acos 是 cos 的反函数:cos(1.0472) 是 0.5,acos(0.5) 是 1.0472(60 度)。

它最常见的用途来自点积。对两个单位向量,dot(a, b) 是它们夹角的余弦,所以 acos(dot(a, b)) 就是夹角本身,范围从 0(同向)到 PI(反向)。

示例计算每个像素的方向和一条旋转光束之间的夹角,把 20 度以内的像素都点亮,形成雷达扫描一样的光锥。

常见用法

  • 向量夹角:光锥、聚光灯、视野判断。
  • 球面坐标:acos(n.y) 给出球面法线的纬度。

常见错误

  • 输入稍微超出 -1 到 1。浮点误差可能让两个单位向量的 dot 返回 1.0000001,对它取 acos 结果未定义(NaN)。一定要先 clamp(x, -1.0, 1.0)。
  • 只需要余弦时也用了它。dot(a, b) > cos(radians(20.0)) 可以完成同样的光锥判断,不必调用 acos。

相关函数