1

我是 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),使它再次变得更加不透明。

我应该使用哪些混合选项来获得平滑的擦除刷?我可以采取其他任何方法来解决它吗?

4

0 回答 0