在 GLSL(特别是我正在使用的 3.00)中,有两个版本
atan()
:atan(y_over_x)
只能返回 -PI/2、PI/2 之间的角度,而atan(y/x)
可以考虑所有 4 个象限,因此角度范围涵盖了从 -PI 开始的所有内容, PI,很像atan2()
C++。
我想使用第二个atan
将 XY 坐标转换为角度。但是,atan()
在 GLSL 中,除了不能处理 when 之外x = 0
,还不是很稳定。尤其是在x
接近零的情况下,除法可能会溢出,从而导致相反的结果角度(您会得到接近 -PI/2 的东西,而您假设会得到大约 PI/2)。
我们可以在 GLSL 之上构建一个好的、简单的实现atan(y,x)
以使其更健壮吗?