0

さまざまなデバイスでフラグメント シェーダーに問題があります。一部のデバイスではシェーダーは正常に動作しますが、他のデバイスではアルゴリズムが興味深い結果を生成します。Java でアルゴリズムをチェックして、アルゴリズム自体にエラーが含まれていないことを確認しました。

アルゴリズムが失敗する 1 つの部分は次のとおりです。このような計算を書くと、すべてのデバイスで機能します。

float a = sqrt(dot(MD,MD));
float factor = (dot(MD,b)/a)/a;

しかし、私が使用する場合

float factor = dot(MD,b)/dot(MD,MD);

これは同じ計算であると信じているため、同じ結果が得られるはずですが、一部のデバイスではアルゴリズムが失敗します。障害が発生する可能性のある他の部分はより複雑ですが、なぜこれが失敗するのかを理解できれば、他の部分も解決できるかもしれません。

どんな助けでも大歓迎です。

ところで、私は OpenGL ES 2.0 を精度 mediump float で使用しており、dot(MD,MD) は常にゼロより大きいです

4

1 に答える 1