我是OpenGL的新手,并试图通过调整画笔笔划的alpha值来实现橡皮擦画笔,该画笔将使用画笔描边擦除纹理以显示opengl视图的背景。 OpenGL视图的opaque属性设置为NO。
我使用Apple的GLPaint作为起点。我使用的画笔是一个纹理,其中心为alpha零,在圆形边缘处径向褪色alpha为1。
我使用glColorMask(0,0,0,1)
仅在alpha通道上绘制。
现在,问题在于混合功能。如果我使用glBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA)
,它会起作用,但不像我预期的那样。
我希望得到的alpha是目标alpha的最小值(屏幕上已有的alpha)和画笔的alpha。
混合函数glBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA)
在......等情况下不起作用。
让我们说屏幕(目的地)的alpha值为0.5。当画笔的边缘(画笔的alpha为1)触及此像素时,结果像素的alpha值应保持为0.5(最小值为1和0.5)。但是通过上面的混合功能,它会变成(1 * 0.5 + 1 * 1),再次变得更不透明。
我应该使用哪些混合选项来获得平滑的擦除笔刷?我还有其他方法可以解决吗?