2011-12-19 179 views
5

我使用alpha紋理。我想用某種顏色對它進行着色,所以它會根據顏色alpha值進行着色,但是整個不透明度將僅由紋理alpha定義。OpenGL ES:如何用顏色着色紋理

這與多紋理相似,但顏色代替第二紋理。 如何做到這一點?

(更新) 我試圖設置紋理組合器。顏色着色很好,但alpha有問題 - 它不會從紋理中獲得價值(如面膜)。 我在這個時刻的代碼:

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); 

屏幕截圖:

沒有着色:

enter image description here

色調與RGBA =(0,0.5%,1%,0.5):

enter image description here

+0

您的代碼似乎是正確的我。你能否附上alpha問題的截圖或描述它的壞處。 – iHunter 2011-12-26 17:39:05

+0

你可以上傳紋理本身嗎? – 2011-12-31 19:30:32

+0

另外,渲染代碼? – 2012-01-01 16:46:37

回答

0

您是否嘗試過上面的代碼與glEnable(GL_BLEND)?

+0

它始終啓用。 – brigadir 2011-12-30 14:44:55

0

您可能想要閱讀關於透明度的OpenGL documentation,15.020:「我如何實現透明效果?」

確保您按照正確的順序渲染場景(您的答案不顯示任何渲染)。

確保您使用了所需的混合功能。

我可以做的另一個建議是開始使用shaders。當我使用它們時,我總是感覺更加控制。

0

我得到了相同的結果(運行在Android三星Galaxy S上,它的價值)。我不明白爲什麼它不起作用。這些文件看起來很合理。

對我來說,它適用於如果我使用GL_MODULATE RGB。如果我使用GL_ADD或GL_ADD_SIGNED,它會再次失敗。即使在Alpha上使用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 2012-01-02 10:31:45

+0

謝謝你的賞金。對不起,我無法提供更多幫助。 – 2012-01-02 15:53:16