OpenGL ES 3.0 を使用して、GPU で流体力学効果を作成しています。16 ビット浮動小数点 FBO を使用すると、効果を正しく機能させることができます。
私の問題は、浮動小数点テクスチャをサポートしていない GPU をターゲットにしていることです。効果は、精度の欠如の下で崩壊します。
この効果は 2 次元にすぎないため、FBO の最初の 2 チャネルのみを読み書きしています。したがって、unsigned int テクスチャの 2 つのチャネルを使用して精度を高めることに成功した人がいるかどうか、またそれがどのように可能であるかを知りたいと思っています。
私の現在の解決策は次のとおりです(GLSLフラグメントシェーダースニペット)、まったくうまくいきません:
#define read(vec) ((((vec).xy * 255.0) - 127.0) / 127.0) + (vec).zw / 255.0
vec4 write(vec2 vec)
{
vec2 temp = ((vec * 127.0) + 127.0);
vec2 a = floor(temp) / 255.0;
vec2 b = mod(temp, 255.0);
return vec4(a,b);
}
主な問題は、このようなスキームではゼロを書き込むことができないことだと思います。
誰かがこれをすでに解決しているか、そのような問題の解決策を見ることができることを願っています:)