2009-08-18 22 views
4

Wenn ich auf Textur rendern, und dann das gleiche Bild zeichnen, scheint es alles dunkler zu machen. Um dieses Bild:Rendern Texturproblem mit Alpha

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

Ich bin Rendering auf die obere linke Quadrat mit Farbe (1, 1, 1, .8) auf eine Textur, dann diese Textur-Rendering sowie das mittlere Quadrat (gleiche Farbe) auf eine andere Textur, dann schließlich, dass Textur plus das untere rechte Quadrat (gleiche Farbe) auf dem Bildschirm.

Wie Sie sehen, jedes Mal, wenn ich Textur rendere, wird alles ein wenig dunkler.

Mein Render-to-Narbung Code wie: (Ich bin auf dem iPhone OpenGL ES verwenden)

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

Gibt es etwas, was ich hier falsch mache? Brauchen Sie mehr Code, um es herauszufinden? Was könnte hier vor sich gehen?

Antwort

6

ich nur raten:

die erste Textur Zeichnung gibt Ihnen 204 (0,8 * 255) in den RGB- und Alpha-Kanäle. Wenn Sie zum zweiten Mal zeichnen (mit GL_BLEND aktiviert, nehme ich an), erhalten Sie das hellgraue 204 RGB mit 80% Alpha, das Ihnen ein mittleres Grau verleiht.

Lösung: Verwenden Sie und multiplizieren Sie Ihre Farben.

+0

Danke! Ich habe gedankenlos immer noch 'glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 'benutzt, ohne über seine Verzweigungen nachzudenken –