2012-06-04 119 views

回答

2

您可以创建一个模板图像。有很多方法可以做到这一点,这里是我工作:

我创建了一个有一个黑色圆圈,其余全部是透明的图像。我从这个图像创建纹理,并绘制成一个简单的纹理平方米,但使用这种混合FUNC:

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 

不要忘记,以使混合和绘图调用完成后恢复您的混合FUNC(或禁用混合如果你不在其他地方使用)

+0

谢谢!如果我有一个透明的背景,这将是工作? –

+0

请注意,如果您只是使用二进制透明度(0或1),那么使用** glAlphaFunc **可能比** glBlendFunc **效果好得多。使用混合意味着要将源和目标颜色组合在一起,因此必须在可以绘制像素之前对帧缓冲区进行采样。使用alpha测试告诉它只丢弃一个像素,而不是从framebuffer中采样一个像素并重新绘制它。两者都有相同的结果,但在GPU上进行alpha测试更容易。 – Tim

+0

TIM:但是如果您认为渲染缓冲区已满,alpha func是否可以清除渲染缓冲区的一部分? miksayer:你实际上没有告诉我们你的情况是什么,你想做什么。在我给你的解决方案中,考虑你在女巫身上有一个绿色的UIView,其中有一个openGL子视图,它填充了任何形状和颜色。通过应用此方法,您可以在绘制遮罩纹理的位置选择绿色形状。 –