Opengl es 使用alpha渲染到纹理问题

Opengl es 使用alpha渲染到纹理问题,opengl-es,alpha,render-to-texture,Opengl Es,Alpha,Render To Texture,当我渲染到纹理,然后绘制相同的图像时,它似乎会使所有东西都变暗。要获取此图像,请执行以下操作: 我用颜色(1,1,1,8)将左上角的正方形渲染到一个纹理,然后渲染该纹理,再加上中间的正方形(相同颜色)到另一个纹理,最后该纹理再加上右下角的正方形(相同颜色)到屏幕 正如您所看到的,每次我渲染到纹理时,一切都会变得有点暗 我的渲染到纹理代码如下:(我在iPhone上使用OpenGL ES) 这里有什么我做错的吗?你需要更多的代码来解决这个问题吗?这里可能发生了什么事?我只是在猜测: 绘制第一个纹理

当我渲染到纹理,然后绘制相同的图像时,它似乎会使所有东西都变暗。要获取此图像,请执行以下操作:

我用颜色
(1,1,1,8)
将左上角的正方形渲染到一个纹理,然后渲染该纹理,再加上中间的正方形(相同颜色)到另一个纹理,最后该纹理再加上右下角的正方形(相同颜色)到屏幕

正如您所看到的,每次我渲染到纹理时,一切都会变得有点暗

我的渲染到纹理代码如下:(我在iPhone上使用OpenGL ES)

这里有什么我做错的吗?你需要更多的代码来解决这个问题吗?这里可能发生了什么事?

我只是在猜测:

绘制第一个纹理会在RGB和alpha通道中显示204(0.8*255)。当你第二次画图时(我想是启用了GL_混合),你得到的是浅灰色204 RGB,80%alpha,这会给你一个中等灰色


解决方案:使用
glBlendFunc(GL\u-ONE,GL\u-ONE\u-SRC\u-ALPHA)
并预倍增颜色。

谢谢!我仍然在无意识地使用
glBlendFunc(GL\u SRC\u ALPHA,GL\u ONE\u减去\u SRC\u ALPHA)
,而没有考虑它的后果
// 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);