2014-01-29 49 views
1

在我正在写的游戏中,我有一个级别,该级别正确呈现给OS提供给我的屏幕渲染缓冲区。我也可以将其渲染到帧缓冲区,然后将此帧缓冲区渲染到输出渲染缓冲区。为了增加一个背景,我想渲染一个不同的场景,一个效果,或者其他任何东西到第二个帧缓冲区,然后让这个“show through”在任何含有该级别的framebuffer没有像素集的地方,即alpha值是我认为这被称为alpha混合。OpenGL混合两个FBOs

我会如何去做这个与OpenGL?我认为glBlendFunc可以用来实现这一点,但我不知道如何将其与帧缓冲区绘图例程耦合以正确实现我想要的结果。

回答

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混合”术语。

+0

这很有道理 - 我认为我会先在目标帧缓冲区中绘制背景,将其设置为目标缓冲区,然后将前景设置为读取缓冲区,并使用混合模式进行blitting操作? –

+0

@TristanSeifert咬伤不适合在这里。这是一种与混合不同的操作。 – concept3d

0

FBOs只是一个容器,不是存储。你需要做的是为每个FBO添加一个纹理目标,并在你完成之后将输出渲染到该纹理。您可以在全屏幕四合一上使用您的输出纹理,并在您的混合中做任何你想要的。