我有一个用 GLSL 编写的简单 OpenGL 3.3 片段着色器。本质上,我正在评估sin(x)
对于中等大的 x(10,000 到 2,000,000 之间),如下所示:
#version 330
out vec4 fColor;
void main() {
fColor = vec4(sin(gl_FragCoord.x * gl_FragCoord.y));
}
它在我的 NVidia 显卡上工作正常,但在我的 Intel HD4000 上,正弦仅返回四个不同的值(+/-1.0以及+/-左右0.3)高于大约 10,000 个输入。
系统:Windows 64位,(Intel)驱动程序版本15.28.20.64.3347。
我的问题:这是一个错误吗?还是供应商以这种方式实现正弦的自由的一部分?
这是快速三角函数实现中相当常见的“错误”——通常使用对于 (-π, π) 范围内的值效果很好的近似值,但对于大值则效果不佳。
由于 GLSL 规范不要求这些函数具有任何特定的准确度或精确度,因此可以认为,只要 sin(x) 中的误差远小于 |x| 即可。没关系,但是这个级别的错误似乎有点过分了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)