7

次のプロセスがあります。

 - draw background
 - draw objects and blend with background (1)GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA
 - draw particle effect with blending (2)GL10.GL_SRC_ALPHA, GL10.GL_ONE in order to highlight overlapping particles

問題 - パーティクルを描画すると、パーティクルが背景とブレンドされて非常に明るくなります。

私が必要としているのは、(2) を使用してパーティクルをブレンドし、(1) を使用して背景とブレンドすることです。

機能しないソリューション:

  • テクスチャに効果を描画し、それを適用するよりもうまく機能します...しかし非常に遅いです。
  • 最初にパーティクルエフェクトを描画し、背景よりもうまく見えます...しかし、背景とエフェクトの間にある必要があるため、シーンオブジェクトを描画できません

これが違いを示す画面です。右は目的の結果、左はパーティクルが背景とブレンドされています。

画像:

ここに画像の説明を入力

どんな助けにも感謝します...

最新の更新: 必要な色を取得できました...しかし... (この方法ではどこにも移動しないようです) 背景をアルファ = 0 でレンダリングし、GL11Ext のブレンド関数を使用しました: glBlendFuncSeparate(GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA、GL10.GL_ONE、GL10.GL_ONE);

GL10.GL_SRC_ALPHA、GL10.GL_DST_ALPHA - アルファがある場合にのみ色がブレンドされます (bg は現在ありません)。

GL10.GL_ONE、GL10.GL_ONE - 加算ブレンドをシミュレートするために、書き込まれたすべてのパーティクルのアルファが最大に設定されます

ここに画像の説明を入力

ご覧のとおり、正常に動作します...粒子画像のアルファ 0 を持つ黒色の塗りつぶし領域を除いて..結果の画像では黒色がアルファ 1 であるため、それを置き換えることができません...

EDIT_2 簡単な言葉で言えば一般的な問題: 赤 (0xff0000) の光る (加算ブレンド) 効果を描画する必要があります。黒の背景では問題ありませんが、緑 (0x00ff00) を使用すると、結果の色は 0xffff00 に近くなります。

何か案は?

4

3 に答える 3

3

GL10.GL_SRC_ALPHA, GL10.GL_ONE 重なり合うパーティクルをハイライトするため

粒子を選別する必要性を回避するには、添加剤の混合以外に方法はありません。パーティクルのオーバーラップを避けるためにこれに固執したい場合は、レンダリングされたパーティクルの明るさを減らすか、パーティクル テクスチャの明るさを減らすことができるように、ブリーディング コントロールをレンダリングに挿入することをお勧めします。

于 2011-03-14T23:51:58.427 に答える
1

glAlphaFunc( GL_GREATER, 0 )を使用して、粒子から alpha=0 フラグメントを拒否できます。ただし、最初にglEnable( GL_ALPHA_TEST )を忘れないでください。

于 2011-03-18T09:19:40.933 に答える
0

別のフレーム バッファへのレンダリングは機能しますか? 完全に透明なフレーム バッファ内のすべてのパーティクルを加算ブレンドしてから、そのフレームの通常のアルファ ブレンドを実行しますか?

于 2011-03-25T15:34:57.343 に答える