Pregunta

Cuando se renderiza a la textura, y luego dibujar la misma imagen, parece que todo sea más oscuro. Para obtener esta imagen:

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

Estoy prestando la plaza superior izquierda con (1, 1, 1, .8) color a una textura, a continuación, haciendo que la textura, más el cuadrado medio (del mismo color) a otra textura, finalmente, que la textura más el cuadrado inferior derecha (del mismo color) a la pantalla.

Como se puede ver, cada vez que me hacen a la textura, todo se vuelve un poco más oscuro.

Mi render-a-textura de código es el siguiente: (estoy usando OpenGL ES en el 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);

¿Hay algo que estoy haciendo mal aquí? ¿Necesita más código para averiguarlo? Lo que podría estar pasando aquí?

¿Fue útil?

Solución

Sólo estoy adivinando:

Dibujo la primera textura que 204 (0,8 * 255) en los canales RGB y alfa da. Cuando se dibuja por segunda vez (con GL_BLEND habilitado, supongo), que está recibiendo la luz gris RGB 204 con un 80% de alfa que le da un gris medio.

Solución:. glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) uso y premultiplicar sus colores

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top