渲染与纹理阿尔法问题
-
18-09-2019 - |
题
当我纹理渲染,然后绘制同一图像,似乎让一切更暗。为了得到这个图像:
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);
有什么,我做错了什么?你需要更多的代码来弄明白?什么可能是怎么回事?
解决方案
我只猜测:
图纸第一纹理给你204(0.8 * 255)在RGB和alpha通道。当绘制第二次(启用GL_BLEND,我相信),你得到浅灰色204 RGB用80%α,让你中灰色。
解决方案:使用glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
和预乘你的颜色
不隶属于 StackOverflow