OpenGL混合了两个FBO

时间:2014-01-29 03:12:56

标签: opengl fbo blending

在我写的游戏中,我有一个级别,可以正确渲染到操作系统提供给我的屏幕渲染缓冲区。我也可以将其渲染为帧缓冲区,然后将此帧缓冲区渲染到输出渲染缓冲区。

要添加背景,我想渲染不同的场景,效果或其他任何第二帧缓冲区,然后在包含关卡的帧缓冲区没有像素设置的任何地方都显示“显示”,即alpha值为0我认为这叫做alpha混合。

我如何使用OpenGL进行此操作?我认为可以使用glBlendFunc来实现这一目标,但我不确定如何将其与帧缓冲绘图例程结合起来以正确实现我想要的结果。

2 个答案:

答案 0 :(得分:4)

glBlendFunc允许应用程序将所有当前绘制操作(例如,X)的输出与已存在的当前“显示”帧缓冲区(例如,Y)混合(合并)。

新显示输出= X(混合)Y

您可以通过gl控制混合功能,如下面的代码段所示:

glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

此处显示完整用法

https://github.com/prabindh/sgxperf/blob/master/sgxperf_test4.cpp

请注意,“显示”和“混合”的概念略有不同,您可能只想坚持使用“每像素Alpha混合”术语。

答案 1 :(得分:0)

FBO只是一个容器而不是存储。您需要做的是为每个FBO附加纹理目标,并在完成此操作后将输出渲染到该纹理。您可以在全屏四边形上使用输出纹理,并在混合时执行任何操作。