我有两个使用QOpenGLFrameBufferObject
创建的FBO,它们是具有透明背景的图像,以及它们上面的一些线条和文本。我使用QOpenGLFramebufferObject::blitFramebuffer将第一个fbo放到第二个fbo上,这会导致第一个fbo的内容放在第二个fbo的顶部。但是,我想保留第一个fbo的透明度,并在第二个fbo上混合第一个fbo的内容(而不是擦除第二个fbo的部分并在其上重新绘制第一个fbo )。环顾四周,我认为使用glBlendFunc也许可以做到这一点,但是下面的代码并没有真正实现我想要的结果。
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// then blit fbo1 on top of fbo2
QOpenGLFramebufferObject::blitFramebuffer(fbo2, fbo1);
当我对帧缓冲区进行blit时,如何保持帧缓冲区的透明度(通过将它们混合在一起)?
发布于 2020-07-12 20:31:54
你不能glBlitFramebuffer
是一个拷贝操作,并且不会混合源和目标片段。
一种可能是渲染到纹理(请参见Framebuffer Object - Attaching Images)。最后,您可以渲染一个屏幕空间矩形,并使用目标帧缓冲区Blend纹理。
https://stackoverflow.com/questions/62866076
复制