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。