2012-02-26 113 views
-1

我決定將我的Android項目移至C++,並且遇到問題。在Java代碼中,我加載了沒有alpha值的紋理,黑色實際上是我的透明顏色,但現在我無法做到這一點。黑色只是黑色,不透明。OpenGL ES black as alpha(transperancy)

我加載紋理爲這樣:

GLuint texture; 
glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_2D, texture); 

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*) image_data); 
+0

'glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);'這不是紋理對象狀態。它不會與紋理一起存儲,幾乎肯定不應該在那裏調用。 – 2012-02-26 17:06:59

+0

你說的對,我錯了,但刪除它劑量修復我的問題 – SteveL 2012-02-26 17:12:06

+0

這就是爲什麼它是一個評論,而不是一個答案。僅供參考。 – 2012-02-26 17:14:45

回答

2

內部格式GL_RGB只有三個組成部分。它沒有alpha。因此,如果您嘗試訪問alpha並使用不存在的alpha進行操作,則OpenGL將爲您填充它。與1.0,這可能不是你想要的。

如果你想要阿爾法,你需要提供阿爾法。 OpenGL不會爲你創建它,也不會認爲黑色意味着「透明」。

或者,您沒有啓用混合或alpha測試。

+0

你是對的GL_RGB我改成了GL_RGBA,也改變了我的glBlendFunc爲glBlendFunc(GL_ONE,GL_ONE);現在我得到了黑色作爲transperant.Thank你的幫助 – SteveL 2012-02-26 17:37:41