Frage

Wenn ich auf Textur machen, und dann das gleiche Bild zeichnen, so scheint es, alles dunkler zu machen. Um dieses Bild zu bekommen:

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 die Textur und die untere rechte Quadrat (gleiche Farbe) auf den Bildschirm.

Wie Sie sehen können, jedes Mal, wenn ich auf Textur machen, alles wird ein wenig dunkler.

Mein Render-to-Textur Code wie folgt aussieht: (Ich bin mit OpenGL ES auf dem iPhone)

// 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, das ich falsch hier? Sie benötigen mehr Code benötigen, es herauszufinden? Was ist hier los sein könnte?

War es hilfreich?

Lösung

Ich vermute, nur:

die erste Textur Zeichnung gibt Ihnen 204 (0,8 * 255) in den RGB- und Alpha-Kanälen. Wenn Sie zum zweiten Mal ziehen (mit GL_BLEND aktiviert ist, nehme ich an), sind Sie den hellgrau 204 RGB mit 80% Alpha bekommen, die Ihnen eine mittelgrau gibt.

. Lösung: Einsatz glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) und premultiply Ihre Farben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top