0

何を試しても、パーティクルは地球の内側に触れることなく地球の外側にレンダリングされます。逆にしたいのです! どのパラメータを変更しても (2 時間試行)、粒子は外側は細かくレンダリングされますが内側はレンダリングされないか、外側と内側の両方の粒子がレンダリングされます。私はこれから大きな頭痛の種になっています。誰かがこのバグを解決するのを手伝ってくれませんか。ステンシルバッファに 1 ビットを使用しています。GDEbugger は、ステンシル バッファが正常に動作していることを示しています。

glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_NEVER, 1, 1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
globe->Use();
globe->SetWVP(&WVP, true);
Render(globe.obj");
glDisable(GL_STENCIL_TEST);

glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

RenderParticlesUsingTransformFeedback();
4

2 に答える 2

5

パーティクルをレンダリングする直前にステンシル テストを無効にしています。

于 2011-11-10T23:44:57.440 に答える
1
glDisable(GL_STENCIL_TEST);

RenderParticlesUsingTransformFeedbackステンシル バッファーに対して実際にテストしたい場合は、実際にそれを使用する必要があります。また、「UsingTransformFeedback」の部分は、これらのパーティクルを以前に TF で生成したことを意味すると思います。ステンシルは三角形をカリングしないため、変換フィードバックを含むデータの生成には影響しません。

いずれにせよ、ステンシル コードは機能しないため、機能しませステンシル バッファだけを使用して、パーティクルが3 次元ボリュームの外側にレンダリングされないようにすることはできません。2D ボリュームの外側で実行できます。また、球体の背後にあるオブジェクトがレンダリングされることを気にしない場合は、3D ボリュームの外側のパーティクルに対して部分的に行うことができます。

ただし、3D ボリュームに限定したい場合は、ステンシル バッファーではなく、シェーダー ロジックを使用する必要があります。3D ボリュームの最近点を保持する必要がありますが、最も遠い点も必要です。したがって、いくつかの興味深い深度バッファーの悪ふざけを行う必要があります。

パーティクルをレンダリングするときは、近い値と遠い値をキャプチャするために使用した両方の深度バッファーを取得する必要があります。次に、シェーダーで、現在の深度がその範囲外にある場合はフラグメントを破棄します。

于 2011-11-11T00:01:03.440 に答える