Pergunta

Quando eu render a textura, e depois tirar a mesma imagem, parece fazer tudo mais escuro. Para receber a imagem:

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

Eu estou tornando o quadrado superior esquerdo com (1, 1, 1, .8) cor para uma textura, então tornando essa textura, mais o quadrado do meio (mesma cor) para outra textura, então, finalmente, que a textura mais o quadrado inferior direito (mesma cor) para a tela.

Como você pode ver, cada vez que eu render a textura, tudo fica um pouco mais escura.

aparência de código My tornar-se textura como: (estou usando OpenGL ES no 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);

Existe alguma coisa que eu estou fazendo de errado aqui? Necessita de mais código para descobrir isso? O que pode estar acontecendo aqui?

Foi útil?

Solução

Eu só estou supondo:

Tiragem o primeiro textura dá-lhe 204 (0,8 * 255) no RGB e alfa canais. Quando você desenha para o segundo tempo (com GL_BLEND habilitado, presumo), você está recebendo a luz cinza 204 RGB com alpha de 80%, o que lhe dá um cinza médio.

Solução:. Uso glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) e premultiply suas cores

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top