1

これが契約です。テクスチャに基づいてパーティクル システムを作成したいのですが、雲のテクスチャがあります。同じサイズとテクスチャを持つ 10 個の異なるポリゴンにテクスチャをマッピングします。それらを互いにブレンドすると、問題が発生し、たとえば5つのポリゴンであるピクセルが白くなりすぎます! 私はこれをしたくありません。私が欲しいのは、蓄積バッファの効果のようなものです。私はこのような効果を取りたい:

ページ内にポリゴンが1 つだけあり、ピクセルがその中にある場合、Rx、Bx、Gx は各ピクセルの色であるとします。これで、それぞれ同じサイズとテクスチャを持つ n 個のポリゴンができました。

Rtotal = R1/n+R2/n+...+Rn/n Gtotal および Btotal と同じ

アルファブレンディングからそのような結果を得るにはどうすればよいですか?

ところで、ここでは初期化です。

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glEnable(GL_DEPTH_TEST) ;
glDepthFunc(GL_ALWAYS);

glEnable(GL_NORMALIZE);
glColor4f(.5,.5, .5,.2); 
glBlendFunc (GL_SRC_ALPHA, GL_DST_ALPHA);
4

1 に答える 1

2

ピクセルごとにフラグメントがいくつあるかを知る必要があるため、希望どおりの結果を得るのは困難です。

パーティクルを正常に見せるために十分な場合は、ブレンドモードを変更するだけで十分です。

おそらく添加剤アルファブレンディングを使用しているため、白に蓄積しています。

result = source_color*source_alpha + destination_color

またはプレーンアディティブブレンディング:

result = source_color + destination_color

(ここで、ソースは「特定のフラグメントの色」であり、宛先は「その場所のフレームバッファーにすでにあったもの」です)。

それらの両方は、多くの「層」で白に崩壊します。ただし、「真の」アルファブレンディングを使用できます。

result = source_color * source_alpha + destination_color * (1-source_alpha)

白に腐敗しません。

OpenGLでは、これは以下に対応します。

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

結果は順序に依存するため、これは正確には望みどおりではありませんが、パーティクルシステムには100%十分なはずです。お役に立てば幸いです。

(また、パーティクルの前にソリッドジオメトリをレンダリングし、z-writeを無効にすることを忘れないでください。)

于 2011-01-02T17:31:47.363 に答える