2D流体シミュレータを実装しました。ソルバーは完全にGPUで実行されます。すべて正常に動作します...私の仕事用PCで。しかし、自宅のPCではひどい不具合があり、それらを修正する方法を理解できません。経験的に、問題がadvectプログラムのどこかにローカライズされていることを発見しました。これは、私がビデオを統合した仕事で、そして自宅で— NVIDIA GeForce 9800 GTは非常に奇妙な原因です。次に、advectプログラムのGLSLソースを示します(明確にするために一部の行が省略されています)。
#version 130
out vec3 value;
uniform sampler2D q;
uniform sampler2D velocity;
uniform float dt;
uniform float inverseSize;
void main()
{
vec2 p = gl_FragCoord.xy * inverseSize;
vec2 np = p - dt * texture(velocity, p).xy;
value = texture(q, np).xyz;
}
そしていくつかのスクリーンショット。
仕事用PC:
自宅のPC:
これは、ベクトル場の視覚化のように見え、概念的には問題ないようです。バッファがどこかでスワップされていますか、またはこれは単一のシミュレーションステップですか?興味深い分野からの興味深い質問、うまくいけば誰かがこれに答えてくれるでしょう。デバッグするには、ユニフォームが正しく渡されているかどうかを確認します。ユニフォームの代わりに定数/浮動小数点を使用して、違いを確認します。
—
teodron 2012
これは、単一のシミュレーション手順です。C ++関数Advect()があります。ターゲットテクスチャ、量テクスチャ(q)、速度テクスチャを受け取ります。私はあなたのアドバイスに従い、ユニフォームの代わりにconstを使用しようとしましたが、結果は同じです。
—
iodiot 2012
—
到達
@iodiot何か悪いことをしたのかもしれません。統合されたドライバーは、NVidiaよりも許容度が高くなります。
—
Bartek Banachewicz 2013
前と後に質問に答えてもらえますか?将来この課題に直面する人にとって、とても役立つと思います。
—
AturSams 2014年