2013-11-04 83 views
0

我有這種顏色的PSOpenGL的 - 混合

actual = <some color loaded from texture>; 
actual.a *= 0.05; //reduce the alpha to have a more transparent result 

//Front to back blending 
actual.rgb *= actual.a; 
last = (1.0 - last.a) * actual + last; 

混合在循環光線投射可這個方程重寫使用OpenGL 3混合的功能呢?我們的目標是從PS通過在自己的渲染更qauds

到目前爲止我用這去除週期:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),但結果看起來不同

編輯:

last = cumulated color (aka. final color)  
actual = current color from texture 
+0

您能否澄清一下'last'和'actual'是什麼? 「actual」是當前的源顏色,「last」是目標顏色,是幀緩衝區中的當前值嗎? – thokra

+0

@thokra我編輯了問題 –

回答

0

的主要問題是您仍然必須在着色器中將源顏色與alpha值預先相乘(actual.rgb * = actual.a)。

我認爲混合,你必須使用此功能:

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE); 
glBlendEquation(GL_FUNC_ADD): 
+0

這給了我黑色的結果 –

0

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) - 利用這一點,你有公式,如:

last.rgb = actual.a * actual.rgb +(1.0 - actual.a)* last.rgb;

這是一個從你的着色器式完全不同:

actual.rgb * = actual.a;

last =(1.0 - last.a)* actual + last;

所以,你有不同的結果。