1

トライストリップである単一のプリミティブ セットを持つジオメトリがあります。プリミティブの一部の三角形が重なり合っているため、マテリアルをジオメトリにアルファ値で追加すると、(予想どおり) 重なりが見えます。ただし、ジオメトリを変更せずにこの効果を取り除きたい - さまざまなブレンド モード (glBlendFunc()) をいじってみましたが、これを機能させることができませんでした。興味深い結果が得られましたが、トライ ストリップのプリミティブ内の不透明度効果を排除し、オブジェクト全体の不透明度を維持するものは何もありませんでした。私は OpenSceneGraph を使用していますが、問題のジオメトリに対して glBlendFunc() を呼び出すメソッドを提供しています。

ここに画像の説明を入力

したがって、画像から、ピンク色の道路、紫色の道路、黄色の道路が 3 つの個別のオブジェクトを構成し、それぞれが 1 つのトライ ストリップを使用して作成されていると仮定します (複数のストリップがありますが、議論のために、ここでは異なる色のトライ ストリップが 3 つしかないことにします)。 . 私は基本的に同じ色内の自己交差を見たくありません

また、私の質問はこれとほとんど同じです: OpenGL, Primitives with opacity without visible overloadですが、その質問に対する受け入れられた回答でブレンディング モードを試したときに、ストリップがシーンにレンダリングされなかったことに注意してください。全て。

4

2 に答える 2

3

以前のプロジェクトでも同じ問題が発生しました。これが私がそれを解決した方法です:

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA)

長方形を描きます。この背後にある考え方は、フレームバッファから取得した目的の透明度で長方形を描画することですが、進行状況では、描画した領域をマスクして、後続の長方形がそこでマスクされるようにします。

ソース:Stackoverflow:重なり合う長方形

于 2012-04-17T00:39:13.317 に答える
1

これを行う 1 つの方法は、パスの各セットをテクスチャにレンダリングしてから、そのテクスチャをアルファ付きでウィンドウに描画することです。パスの色ごとにこれを行うことができます。

これは一般的な考え方の概要です。

于 2012-04-17T00:40:04.293 に答える