Question

Quand je rends à la texture, puis dessine la même image, il semble tout assombrir. Pour obtenir cette image:

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

Je rend le carré supérieur gauche avec la couleur (1, 1, 1, .8) à une texture, puis rendu cette texture, plus le carré du milieu (même couleur) à une autre texture, puis finalement que la texture plus le carré en bas à droite (même couleur) à l'écran.

Comme vous pouvez le voir, chaque fois que je rends à la texture, tout est un peu plus sombre.

Mon code rendu à la texture ressemble à: (J'utilise OpenGL ES sur l'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);

Y at-il quelque chose que je fais mal ici? Avez-vous besoin plus de code pour le comprendre? Qu'est-ce qui pourrait se passer ici?

Était-ce utile?

La solution

Je ne devine:

Dessin la première texture vous donne 204 (0,8 * 255) dans les canaux RVB et alpha. Lorsque vous dessinez pour la deuxième fois (avec GL_BLEND permis, je présume), vous obtenez le gris clair 204 RGB avec 80% d'alpha qui vous donne un gris moyen.

Solution:. L'utilisation glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) et Prémultiplier vos couleurs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top