2017-02-21 1 views
1

私はOpenGLを初めて使っていて、自分の単純なゲームエンジンを作成してホイールを再学習しようとしています。そうするために、私はフラグメントシェーダがテクスチャクォードに使用するフォントテクスチャマップをプログラムで生成していますが、これは通常の方法です。部分的に透明なフォントテクスチャを積み重ねることは、レンダリング順序を変更することによって壊れます

このテキストは、あなたが期待通りにその背後にあるものは何でも見ることができるように透明な背景を画面上に表示され、ほとんどが正常に動作します(図1)

私はその後、同じ地域に別のテキストメッシュを追加する場合(図2)

しかし、もし私がそれよりも高いz-インデックス(カメラに近い)を持っていれば、最初の文字列(ピンク色のもの)がカメラに近づくように(ただしレンダー順は変わらないように)、Zインデックスを逆にすると、図のような効果が見られます。 3ここで、テキストの背景は透明ですが、他のテキストを上書きしたように見えます。

注:2つのメッシュがレンダリングされる順序を逆にして、白いテキストが違反者になる以外は同じ効果が発生します。

つまり、Zインデックスの順序がレンダリングの順序と一致すると、なぜ正しくブレンドされますか?私の仮説は、部分的に透明な背景を持つクワッドを「背後」にレンダリングしようとすると、最初にレンダリングしなければならないということです。これは私が慣れていなければならないグラフィックスレンダリングの基本ルールですか?積み重ね順序を把握して、アイテムを適切な順序でレンダリングする必要がありますか?

render order affects blending

答えて

2

あなたは、テクスチャの透明部分に目を通すことができるかもしれけれども、OpenGLはできません。色がブレンドされても、デプスバッファーは一定の値に設定され、背後にあるものをレンダリングするときは、目に見えない部分で遮られます。

これを修正するには、深度テストを無効にするか、または三角形を前後に並べ替えることができます。

+1

オブジェクトの背後にあるテキストを表示したくない場合は、テキストジオメトリの深度書き込みを無効にすることはできますが、深度テストは有効にしておくことができます。 – BDL

関連する問題