2016-10-16 72 views
0

我想用Alpha混合(SRC_ALPHA, ONE_MINUS_SRC_ALPHA),基本上是這樣的:CG着色器阿爾法混合

frag_out.aaaa * frag.out + ((1.0, 1.0, 1.0, 1.0) - frag_out.aaaa) * pixel_color 

假設已經像素的顏色在屏幕上是(1.0, 1.0, 1.0, 1.0) 顏色我目前呈現爲(1.0, 1.0, 1.0, 0.4)

當我渲染時,屏幕上產生的顏色具有α0.76(儘管在之前它是完全不透明的)

確實:

(0.4, 0.4, 0.4, 0.4) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 0.76) 

因此,基本上屏幕上的顏色是不透明的(白色),並且在透明精靈顯示在屏幕上方後,屏幕變得透明(0.76 alpha),並且我可以查看背景。這將是完美的,如果我可以這樣混合:

(0.4, 0.4, 0.4, 1.0) * (1.0, 1.0, 1.0, 0.4) + (0.6, 0.6, 0.6, 0.6) * (1.0, 1.0, 1.0, 1.0) = (1.0, 1.0, 1.0, 1.0) 

是否有可能實現這一目標?如果是,如何?

回答

3

此使用OpenGL 3.0以上時,因爲該共混物的功能可以存在分別用於RGB和A.對於你的情況下,這將是

glBlendFuncSeparate(GL_SOURCE_ALPHA, GL_ONE_MINUS_SOURCE_ALPHA, GL_ONE, GL_ONE); 

指定爲目的地的混合因子的最後一個參數被設置是完全可能的alpha可能必須進行調整,因爲您沒有指定目標alpha的行爲< 1.有關更多詳細信息,請參閱function documentation

+0

謝謝!你知道如何在CG陰影語言中指定這種類型的混合嗎? – Terko

+0

對不起,從未使用CG。 – BDL