4

glBlendFunc が私の問題を解決するための優れた機能であるかどうかはわかりませんが、必要になると思います! これが私の問題です:

ここに画像の説明を入力

右側に二本の松の木が映っているのがわかりますか?私はそのようなものが欲しいです:

ここに画像の説明を入力

次に、不透明な画像と同じ表示を行う方法が必要ですが、透明な画像を使用します。glBlendFunc に特別な組み合わせがありますか、それとも他の方法で進める必要がありますか?

4

1 に答える 1

1

純粋な混合アプローチがうまくいくとは思いません。2 つの重なり合う木の反射がある場合、最初の反射はレンダリング後に水とブレンドされます。2 番目の木を描くときは、2 番目の木だけを水とブレンドする必要があります。しかし、フレームバッファ内の水の色はすでに最初の木とブレンドされているため、水の色だけはフレームバッファにはありません。

次の 3 つのアプローチが思い浮かびます。

  1. ブレンドせずに、すべての木の反射を FBO に描画します。次に、ブレンドを有効にして、結果を水の上に描画します。

  2. 反射を描画している間、深度テストを有効にします (現在無効にしている場合)。木の反射を前後に描きます。水面に対してわずかにオフセットし、描画する反射ごとにオフセットを減らします。そのため、近くにある木の反射は、遠くにある木の反射を隠します。

  3. オプション 2 と同様です。ただし、オフセットと深度のテストの代わりに、ステンシル テストを使用して、任意のピクセルで 1 つの反射された木のみがレンダリングされるようにします。

于 2014-08-24T02:42:05.710 に答える