glsl无穷大常数

atb*_*atb 13 glsl infinity

GLSL是否有+/-无穷大或NaN的任何预定义常数?我这样做是一种解决方法,但我想知道是否有一种更清洁的方式:

// GLSL FRAGMENT SHADER
#version 410

<snip>

const float infinity = 1. / 0.;

void main ()
{
    <snip>
}
Run Code Online (Sandbox Code Playgroud)

我知道这个isinf函数,但我需要为变量赋予无穷大,这对我没有帮助.

Jan*_*egg 8

Nicol提到的那样,没有预先定义的常量.

但是,从OpenGL 4.1开始,您的解决方案至少可以保证正常工作并正确生成无限值.

例如,参见glsl 4.4:

4.7.1范围和精度

...

但是,将非零除以0会得到适当签名的IEEE Inf:如果同时执行正零和负零,则将生成正确签名的Inf,否则将生成正Inf.

使用旧版OpenGL时要小心:

例如,在glsl 4.0中它说:

4.1.4浮子

...

类似地,诸如除以0之类的条件的处理可能导致未指定的结果,但在任何情况下这种情况都不会导致处理的中断或终止.


小智 6

这可能有用吗?

const float pos_infinity = uintBitsToFloat(0x7F800000);
const float neg_infinity = uintBitsToFloat(0xFF800000);
Run Code Online (Sandbox Code Playgroud)

“如果在参数 x 中传递浮点无穷大的编码,则生成的浮点值是相应的(正或负)浮点无穷大”


Nic*_*las 5

它没有预定义的常量,但是有isinf功能可以测试某些事物是否为无穷大。

当我在使用它时,是否还有其他常量(例如FLT_MAX FLT_EPSILON等),就像C语言中一样?

不是,没有。