我在shadertoy上有一个example着色器,其行为与我预期的不同。它需要X和Y片段坐标,将它们加在一起,然后计算此表达式的ULP。期望ULP值非常小,因此我将其乘以很大的数字并将其输出为像素颜色。我希望有白色像素,但会变成黑色,表示该值实际上为零。这种错误是由于我的WebGL实施(适用于Windows的Google Chrome)中的精度限制引起的吗?
float ulp(float f)
{
int i = floatBitsToInt(f);
return abs(intBitsToFloat(i + 1) - f);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float f = fragCoord.y + fragCoord.x;
vec3 col = vec3(ulp(f) * 3.4e38);
fragColor = vec4(col, 1.0);
}
编辑:出于好奇,我在手机上加载了sharttoy示例,瞧瞧,我得到了一个白屏,就像我最初期望的那样。