opengl-es - 使用 alpha 渲染到纹理问题

标签 opengl-es alpha render-to-texture

当我渲染到纹理,然后绘制相同的图像时,它似乎使一切都变暗了。要获取此图像:

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

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

如您所见,每次渲染到纹理时,一切都会变得更暗。

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

// 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);

我在这里做错了什么吗?你需要更多的代码来弄清楚吗?这里可能会发生什么?

最佳答案

我只是猜测:

绘制第一个纹理在 RGB 和 alpha channel 中为您提供 204 (0.8 * 255)。当您第二次绘制时(我假设启用了 GL_BLEND),您将获得带有 80% alpha 的浅灰色 204 RGB,这为您提供了中等灰色。

解决方法:使用glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)并预乘你的颜色。

关于opengl-es - 使用 alpha 渲染到纹理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295657/

相关文章:

android - 为什么不能从另一个线程调用 OpenGL ES 函数

directx - 多个渲染目标不保存数据

c++ - 在 OGRE 中创建动态纹理时获取错误的 RGB

Android 视频解码器仅在 Lollipop 上不绘制到 gles 表面

Android OpenGL ES 2.0 帧率上限?

qt - 我怎样才能找到这些在我的场景中扭曲对象的 OpenGL 调用?

ffmpeg - 将背景转换为黑色?

iPhone - 创建一个带有不透明文本的半透明矩形

IOS:关于动画的问题

c++ - 将 OpenGL 渲染保存到图像文件