如何使用 QOpenGLFramebufferObject 对两个透明帧缓冲区对象进行 blit?

Posted

技术标签:

【中文标题】如何使用 QOpenGLFramebufferObject 对两个透明帧缓冲区对象进行 blit?【英文标题】:How to blit two transparent frame buffer objects using QOpenGLFramebufferObject? 【发布时间】:2020-07-12 20:20:16 【问题描述】:

我有两个使用QOpenGLFrameBufferObject 创建的 FBO,它们是具有透明背景的图像,上面有一些线条和文本。我正在使用QOpenGLFramebufferObject::blitFramebuffer 将第一个 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 时,如何保持它们的透明度(通过将它们混合在一起)?

【问题讨论】:

【参考方案1】:

你不能glBlitFramebuffer是一个复制操作,并且不混合源片段和目标片段。 一种可能是渲染到纹理(参见Framebuffer Object - Attaching Images)。最后,您可以使用目标帧缓冲区渲染屏幕空间矩形和Blend 纹理。

【讨论】:

以上是关于如何使用 QOpenGLFramebufferObject 对两个透明帧缓冲区对象进行 blit?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?