将具有 alpha 的位图图层渲染到 FBO

Posted

技术标签:

【中文标题】将具有 alpha 的位图图层渲染到 FBO【英文标题】:Rendering layers of bitmaps with alpha to FBO 【发布时间】:2016-11-08 18:27:26 【问题描述】:

我需要绘制几个对 FBO 半透明的位图“层”(供以后回读)。

我目前的方法是创建一个 FBO,为其附加纹理并使用 glTexSubImage2D 将位图“绘制”到 FBO,但是这不起作用,因为 glTexSubImage2D 不绘制/混合像素,而只是覆盖纹理中当前的像素。

最好的方法是什么?

【问题讨论】:

【参考方案1】: 您创建了一个带有干净纹理 R 的 FBO,以保存最终结果。 对于每个位图,您: 将位图上传到纹理 T(T 和 R 是不同的纹理)。 在启用并正确设置GL_BLEND 的情况下将带有 T 纹理的四边形渲染到 FBO。

最终结果是 R 保存了您的混合位图。您现在可以将其读回或用于其他纹理操作。

【讨论】:

谢谢,这行得通。最后一个问题:我的图层可能有不同的大小(因此 glTextSubImage2D),这意味着 T 中可能有前一层的剩余部分。确保在每个图层绘制之间有一个空纹理的最佳方法是什么? 如果纹理大小发生变化:要么每次创建一个新纹理,要么调整四边形和纹理坐标,以便它们仅从 FBO/纹理的相关部分绘制和采样。跨度>

以上是关于将具有 alpha 的位图图层渲染到 FBO的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 渲染到 FBO

将我的场景渲染到帧缓冲区对象(FBO)然后将该 FBO 渲染到屏幕所需的步骤是啥?

带有模板缓冲区 FBO 的延迟渲染器

将两个图像附加到 fbo 以进行 mrt 渲染

渲染到屏幕和 FBO 给出不同的结果

FBO:渲染到纹理,绘制渲染纹理时纹理映射错误