2014-01-29 80 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添加一個紋理目標,並在你完成之後將輸出渲染到該紋理。您可以在全屏幕四合一上使用您的輸出紋理,並在您的混合中做任何你想要的。