我想将两个tga图像与指定的alpha通道混合。基本图像和前景图像,前景图像只有几个字符,alpha设置为255,前景图像的其余alpha值设置为0.使用此前景图像,我可以在基础上添加一些字符图像(仅基本图像上的字符覆盖,前景图像的其余部分是透明的)。我使用一些像这样的OpenGL代码:
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, m_width, m_height);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glWindowPos3i(0, 0, 0);
// draw the base image to the FBO
glDrawPixels(m_width, m_height, GL_RGBA, GL_UNSIGNED_BYTE, m_base.imageData);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glWindowPos3i(0, 0, 0);
// draw the foreground image to blend with the base image
glDrawPixels(m_width, m_height, GL_RGBA, GL_UNSIGNED_BYTE, m_foreground.imageData);
GL_ERROR;
glDisable(GL_BLEND);
问题是它不起作用。程序只渲染基本图像,并且没有字符(在前景图像中)?我认为它应该工作,我不知道它为什么没有。我测试了它,没有gl_error
发生。任何人都可以帮忙吗?混合功能在glColor
设置的背景颜色和第一个glDrawPixels
之间正常工作。但是,它在第一个和第二个glDrawPixels
之间不起作用,为什么?