我尝试在Android设备上创建噪音屏幕。为了获得随机性,我使用以下公式:
fract((sin(dot(gl_FragCoord.xy ,vec2(0.9898,78.233)))) * 4375.85453)
我在http://glslsandbox.com/中对其进行了测试,它非常完美。
但是在手机和平板电脑上,我得到了另一个结果
在Nexus 9上,我收到此消息:
但是还不错。在LG-D415上,我收到此
有人可以帮我吗?
着色器:
#ifdef GL_ES
precision mediump float;
#endif
float rand(vec2 co){
return fract((sin(dot(co.xy ,vec2(0.9898,78.233)))) * 4375.85453);
}
void main() {
vec2 st = gl_FragCoord.xy;
float rnd = rand(st);
gl_FragColor = vec4(vec3(rnd),1.0);
}
几乎可以肯定这是一个精度问题。您的基于mediump的代码可能在某些设备上以标准单精度浮点数执行,或者在其他设备上(或两者之间的任何地方)以半精度执行。
半精度根本不足以进行任何精度的计算。
使用Gold Noise,均匀的标准化分布。它是专为以低精度(lowp
)运行而设计的。它还接受种子(例如时间)。