5

アルファ付きのテクスチャがあります。そして、色をつけたいので、色のアルファ値に応じて色付けされますが、全体的な不透明度はテクスチャアルファによってのみ定義されます。

これはマルチテクスチャリングに似ていますが、2 番目のテクスチャの代わりに色を使用します。どうやってするの?

(更新) テクスチャ コンバイナーをセットアップしようとしました。色はきれいに着色されていますが、アルファに問題があります - テクスチャから値を取得しません (マスクなど)。現時点での私のコード:

glActiveTexture (GL_TEXTURE0); // do we need stage #1?
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_ALPHA);
// this doesn't work for alpha:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);

スクリーンショット:

着色なし:

ここに画像の説明を入力

RGBA = (0, 0.5, 1, 0.5) の色合い:

ここに画像の説明を入力

4

3 に答える 3

0

Have you tried the above code with glEnable(GL_BLEND)?

于 2011-12-29T07:21:00.833 に答える
0

透過性に関するOpenGL ドキュメント、 15.020 :「透過効果を実現するにはどうすればよいですか?」を参照してください。

シーンを正しい順序でレンダリングしていることを確認してください (答えにはレンダリングが表示されません)。

目的のブレンド関数を使用していることを確認してください。

もう 1 つの提案は、シェーダーの使用を開始することです。それらを使用するとき、私はいつももう少しコントロールしていると感じます.

于 2012-01-01T16:46:28.933 に答える
0

同じ結果が得られます(Android Samsung Galaxy Sで実行していますが、それだけの価値があります)。うまくいかない理由がわかりません。ドキュメントはかなり明確に見えます。

私にとっては、RGB に GL_MODULATE を使用すると機能します。GL_ADD または GL_ADD_SIGNED を使用すると、再び失敗します。アルファで GL_MODULATE を使用しても、RGB でこれらのモードを使用すると、同じ誤った動作が発生します。色を補間するのではなく、色を調整することに行き詰まっている可能性があります。

要約すると、これは私にとってはうまくいきます:

glActiveTexture (GL_TEXTURE0); // do we need stage #1?
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
于 2012-01-01T21:35:02.153 に答える