SIN(X)仅返回4个不同的值,用于GLSL片段着色器的中等大输入,Intel HD4000



我有一个简单的OpenGL 3.3用GLSL编写的片段着色器。本质上,我正在评估中等大X(10,000至2,000,000之间)的sin(x),类似的内容:

#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 64bit,(Intel)驱动程序版本15.28.20.64.3347。

我的问题:这是一个错误吗?还是以这种方式实施正弦的供应商的一部分?

这是一个相当常见的"错误"在快速的三角实现中 - 通常,使用近似值,该近似适用于范围内的值(-π,π),但对于较大的值。

由于GLSL规格不需要这些功能的任何特定的准确性或精度,因此可以说,只要SIN(X)中的误差远小于| x |没关系,但是这种错误级别似乎过多。

最新更新