Domanda

Quando ho rendere a consistenza, e quindi disegnare la stessa immagine, sembra rendere tutto più scuro. Per ottenere questa immagine:

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

sto rendendo la piazza in alto a sinistra con (1, 1, 1, .8) colore per una texture, poi rendendo quella struttura, oltre la piazza centrale (stesso colore) a un'altra consistenza, poi finalmente quella texture più il quadrato in basso a destra (stesso colore) allo schermo.

Come si può vedere, ogni volta che mi rendo per consistenza, tutto diventa un po 'più scura.

Il mio render-to-texture codice è simile: (sto usando OpenGL ES su 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);

C'è qualcosa che sto facendo male qui? Avete bisogno di più il codice di capirlo? Che cosa potrebbe essere succedendo qui?

È stato utile?

Soluzione

Sono solo indovinando:

Disegnare il primo texture che 204 (0,8 * 255) nei canali RGB e alfa dà. Quando si disegna per la seconda volta (con GL_BLEND abilitato, presumo), che stai ricevendo il grigio chiaro 204 RGB con l'80% di alfa che vi dà un grigio medio.

. Soluzione: uso glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) e premoltiplicazione i tuoi colori

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top