1

我想将两个 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,为什么?

4

0 回答 0