GLSL是否有+/-无穷大或NaN的任何预定义常数?我这样做是一种解决方法,但我想知道是否有更简洁的方法:
// GLSL FRAGMENT SHADER
#version 410
<snip>
const float infinity = 1. / 0.;
void main ()
{
<snip>
}
我知道了 isinf
功能,但我需要为变量分配无穷大,这对我没有帮助。
GLSL是否有+/-无穷大或NaN的任何预定义常数?我这样做是一种解决方法,但我想知道是否有更简洁的方法:
// GLSL FRAGMENT SHADER
#version 410
<snip>
const float infinity = 1. / 0.;
void main ()
{
<snip>
}
我知道了 isinf
功能,但我需要为变量分配无穷大,这对我没有帮助。
喜欢 尼科尔 提到,没有预定义的常量。
但是,从OpenGL 4.1开始,您的解决方案至少可以保证正常工作并正确生成无限值。
参见例如 glsl 4.4:
4.7.1范围和精度
...
然而, 将非零除以0会得到 适当签署的IEEE Inf:如果实现了正零和负零,则正确签名 将生成Inf,否则将生成正Inf。
使用旧版OpenGL时要小心:
例如在 glsl 4.0 它说:
4.1.4浮子
...
同样,治疗条件如 除以0可能导致未指定的结果但在任何情况下,这种情况都不应导致处理中断或终止。
它没有预定义的常量,但有 isinf
用于测试某些东西是否无穷大的功能。
虽然我喜欢它,但是有其他东西的常量,比如FLT_MAX FLT_EPSILON等,就像C中那样吗?
不是,没有。