0

これが私の問題です。

6つの透明なポリゴン(GL_BLEND、ソースGL_ONE、dest GL_ONE)でキューブスカイボックスをレンダリングした直後に、すべての前に(各コーナーに頂点の色を付けて)直交クワッド(ビューポートを埋める)をレンダリングしています。これは完璧に機能します。スカイボックスは、クワッドの下で半分の色になり、独自のUVマップされたテクスチャで半分の色になります。

高さマップ(GL_BLEND、GL_ONE、...)を追加すると、問題が発生します。高さマップは、+の下のスカイボックスとクワッドでブレンドされます。

私が欲しいのは、高さマップをオルソクワッドとブレンドすることですが、スカイボックスとブレンドすることはできません。高さマップを通してスカイボックスを見たくありません。

これを行うには別の方法があると確信しています。

最初にオルソクワッドとスカイボックス(現在のように)をレンダリングしてから、スカイボックスを差し引く特別なブレンディングで高さマップをレンダリングすることはできますが、ある種のマルチパスブレンディングでオルソクワッドをレンダリングすることはできませんか?

どうもありがとうございます !

ディミトリ

4

2 に答える 2

2

あなたのglBlendFuncwithGL_ONE, GL_ONEは加法ブレンドと呼ばれ、可換性、つまり A+B = B+A であるという優れた特性 (他の加法と同様) を持っています。

次に、別の順序で描画しても、ブレンドしても同じ結果が得られます。

あなたの場合、ブレンドせずに高さマップとスカイボックスを描画できます。次に、ブレンディングを使用したフルスクリーンクワッド。

高さマップとスカイボックスが重ならないようにするには、次のいずれかを実行できます。

  • 最初にスカイボックスを描画し、次に高さマップを描画します
  • GL_DEPTH_TESTZバッファがピクセルの可視性をソートできるように有効にして、逆に描画します

お役に立てれば

于 2011-02-26T22:12:54.803 に答える
0

OpenGL はシーン グラフではないため、各レンダリング ステップの後、既存のすべてのコンテンツに対するすべてのコマンドが実行されます。glBlendFunc(GL_ONE, GL_ONE); 本当に値を追加したいのでない限り、とにかく正しく聞こえません。glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); を探していると思います。

于 2011-02-26T21:11:40.147 に答える