1
在以下着色器中,m1
和m2
應該具有相同的值,因爲cos(asin(x)) == sqrt(1.0 - x*x)。webgl片段着色器中三角函數的令人驚訝的行爲
precision highp float;
void main() {
float scale = 10000.0;
float p = length(gl_FragCoord.xy/scale);
float m1 = cos(asin(p));
float m2 = sqrt(1.0 - p*p);
float v = asin(m1); // change to m2 to see correct behavior
float c = degrees(v)/90.0;
gl_FragColor = vec4(vec3(c), 1.0);
}
此行爲確實令人費解:
然而,場使用m1
shows a black ring in the lower left corner而m2
產生預期的平滑場產生的。黑環的解釋是什麼?我認爲這可能是一個精確問題,但highp
產生相同的結果。或者黑環代表NaN的結果,但NaN不應該出現在那裏。
這鉻/ FF複製在MacOS 10.10.5。不在Windows 10或iOS 9.3.3上覆制。會這樣的事情是一個驅動程序問題?
(對於好奇,這些公式計算緯度爲中心的北極的正投影。)
--UPDATE--
今天證實,MacOS的10.11.6不不顯示渲染錯誤。這看起來像是一個驅動程序/操作系統問題。
'm2'正確渲染,所以我將重點放在'm1'。即使使用夾具,渲染也是不正確的。 – cambecc
您的GPU是否通過了這些測試? [test1](https://www.khronos.org/registry/webgl/sdk/tests/conformance/glsl/functions/glsl-function-asin.html?webglVersion=1&quiet=0),[test2](https:/ /www.khronos.org/registry/webgl/sdk/tests/conformance/ogles/GL/asin/asin_001_to_006.html?webglVersion=1&quiet=0)。你的GPU又是什麼?發佈你的GPU/Driver信息'about:gpu'內容。 – gman
兩個測試都通過了。 – cambecc