2011-12-19 7 views
5

私はアルファを持つテクスチャがあります。そして、私はいくつかの色で着色したいので、色のアルファ値に応じて着色されますが、オーバーオールの不透明度はテクスチャアルファによってのみ定義されます。OpenGL ES:テクスチャテクスチャの色を使用して

これは、マルチテクスチャに似ていますが、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と

enter image description here

色合い=(0、0.5、1、0.5):

enter image description here

+0

あなたのコードは、私には正しいようです。アルファ号のスクリーンショットを添付するか、それとも悪いことを記述してください。 – iHunter

+0

テクスチャ自体をアップロードできますか? –

+0

また、レンダリングコード? –

答えて

0

上記のコードはglEnable(GL_BLEND)ですか?

+0

常に有効です。 – brigadir

0

OpenGL documentationを透過率15.020で読むことができます。「透明な効果を得るにはどうすればよいですか?」

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

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

もう1つの提案は、shadersを使用することです。私はそれらを使用するとき、私はいつもより多くのコントロールを感じます。

0

私は同じ結果を得ました(Androidサムスンギャラクシー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); 
+0

はい、変調モードではすべて正常に動作しますが、私のようには見えません。私はそれを緩めないためにここに+50をかけます。 – brigadir

+0

奨励賞をいただきありがとうございます。申し訳ありませんが私はより多くの助けができませんでした。 –

関連する問題