如何达到和glAlphaFunc(GL_GREATER, 0.99f)一样的效果?

How to achieve the effect being the same as using glAlphaFunc(GL_GREATER, 0.99f)?

我有一个png图像用作纹理,其中一部分是透明的,因为alpha为0。现在似乎不再使用"glAlphaFunc(GL_GREATER, 0.99f)"和"glEnable(GL_ALPHA_TEST)"。我正在考虑使用混合。但是如何实现呢?

另外,谁能给我解释一下这个函数是怎么实现的

glBlendFunc(GL_SRC_COLOR, GL_ZERO);

有效吗?什么是源比例因子和目标比例因子以及如何使用它们?

alpha 函数根据其 alpha 值丢弃片段。它是固定管道的一部分。在可编程管道中,您只需适当比较您的 alpha 并在必要时调用 discard。或者,如果您愿意并且您的混合模式合适,只需将 alpha 向下推至 0.0.

如果您不使用可编程管道,那么您应该使用 glAlphaFunc — 您显然是在用老式的方式编写内容。

glBlendFunc(GL_SRC_COLOR, GL_ZERO) 有效地使用源像素的 R、G、B、A 作为源缩放因子,使用 0 作为目标缩放因子。所以输出像素将只是输入的函数,每个通道将被平方。