2015-03-31 24 views
0

我有一個PNG圖像作爲紋理,其中一部分是透明的,因爲α爲0.現在看起來不再使用「glAlphaFunc(GL_GREATER,0.99f)」和「glEnable(GL_ALPHA_TEST)」。我正在考慮使用混合。但如何實現呢?如何實現與使用glAlphaFunc(GL_GREATER,0.99f)相同的效果?

此外,任何人都可以向我解釋如何功能

glBlendFunc(GL_SRC_COLOR, GL_ZERO); 

的作品?目標比例因子&以及它們的使用方式是什麼?

+1

默認的混合方程是可加的,所以混合函數可以運行到'Src.rgb * Src.rgb + Dst.rgb * 0'(其中'Src'是輸入的顏色,'Dst'是已經存在的顏色幀緩衝器)。我不確定你在這裏想要完成什麼?混合功能從哪裏來? – 2015-03-31 21:25:19

+0

@Andon M. Coleman這只是一個例子(可能沒有任何意義),因爲我不明白這兩個參數是如何工作的。你說的話對我有意義。因此,如果我將其更改爲glBlendFunc(GL_SRC_ALPHA,GL_ONE),結果將如下所示:Src.a * Src.rgb + Dst.rgb * 1? – Oscar 2015-04-01 02:17:12

+0

是的,這正是如何工作。 – 2015-04-01 18:38:19

回答

1

alpha函數根據它們的alpha值丟棄片段。它是固定管道的一部分。在可編程管道中,您只需根據需要比較您的alpha,並在必要時調用discard。或者,如果您更喜歡並且您的混合模式適合,只需將Alpha降至0.0即可。

如果你不使用可編程管道,那麼你應該使用glAlphaFunc - 你明確地寫東西是老式的方式。

glBlendFunc(GL_SRC_COLOR, GL_ZERO)有效地使用源像素的R,G,B,A作爲源縮放因子,並將0作爲目標縮放因子。所以輸出像素將只是輸入的函數,每個通道將平方。

相關問題