2009-08-18 97 views
4

當我紋理渲染,然後繪製同一圖像,似乎讓一切更暗。爲了得到這個圖片:紋理渲染問題阿爾法

http://img24.imageshack.us/img24/8061/87993367.png

我的渲​​染色彩(1, 1, 1, .8)左上方到紋理,然後渲染質感,再加上中間方(同色)到另一個紋理,最後是紋理加上右下方(相同顏色)到屏幕上。

正如你所看到的,我每個紋理渲染的時候,一切變得有點暗。

我渲染到紋理的代碼看起來像:(我用在iPhone上的OpenGL ES)

// gen framebuffer 
GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

// gen texture 
GLuint texture; 
glGenTextures(1, &texture); 

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glDisable(GL_TEXTURE_2D); 

// hook it up 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, texture, 0); 
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)) 
    return false; 

// set up drawing 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 
glViewport(0, 0, Screen::Width, Screen::Height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, Screen::Width, 0, Screen::Height, -1, 1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glColor4f(1, 1, 1, 1); 

// do whatever drawing we'll do here 
Draw(); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); 

有什麼,我做錯了什麼?你需要更多的代碼來弄清楚嗎?這裏可能會發生什麼?

回答

6

我只是猜測:

繪製第一個紋理給你204的RGB和alpha通道(0.8 * 255)。當你第二次畫畫(啓用GL_BLEND時,我假設),你會得到淺灰色的204 RGB和80%alpha,這會給你一箇中等灰度。

解決方案:使用glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)和預乘你的顏色。

+0

謝謝!我無意中仍在使用'glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)'而不考慮其分支 – 2009-08-18 19:24:31