2015-03-31 200 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作为目标缩放因子。所以输出像素将只是输入的函数,每个通道将平方。

相关问题