9

私はサムスンギャラクシーSIIIで動作する次の簡単なアルゴリズムを取得するのに苦労しています

float rand(vec2 co)
{
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

....
vec3 color = texture2D(u_texture, v_texcoord);
gl_FragColor.rgb = color + vec3(rand(gl_FragCoord.xy + time / 1000.0));
....

このコードは、SamsungGalaxyS1とGoogleNexusSで予想されるノイズを完全に生成します。しかし、ARMのMali-400/MP4を使用する新しいスマートフォンでは完全に失敗します。

誰でもこのアルゴリズムの問​​題を見つけることができますか?または、なぜ失敗するのか理解できますか?

4

2 に答える 2

9

sinあなたの問題は、おそらく大きな数を取ることから来ています。この結果は、sin利用できない の正確な実装に依存します。明らかにsin、Mali チップで使用されている関数は、他の関数よりも大きな数値でより予測可能な結果を​​もたらします。

このことではなく、実際のノイズ関数を使用する必要があるようです。少なくとも、ハードウェア全体で予測可能な結果が得られます。

于 2012-07-02T19:20:37.747 に答える