9

我有一个基于 GLPaint 示例代码的小油漆应用程序。它工作正常。我的问题是我需要实现一个“画笔”来擦除已经绘制的纹理。

我的目标是拥有一个边缘柔软的橡皮擦。现在我只是采用了与绘制相同的纹理,但将混合功能从

glBlendFunc(GL_SRC_ALPHA, GL_ONE);

glBlendFunc(GL_ZERO, GL_ZERO);

结果是一个方形矩形橡皮擦。没关系,但这不是我真正想要的。我需要柔软的边缘。我想做一个圆形橡皮擦而不是方形矩形。

你有任何猜测如何实现吗?或者你知道是否有办法创建我自己的自定义混合功能?

4

1 回答 1

12

你知道纹理的背景颜色吗?如果是这样,您可以简单地在其上绘制背景,而不是“擦除”。这会稍微简单一些,因为您只会更改颜色而不是混合模式。

如果您需要通过混合来完成,请尝试:

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);

这将使用全 Alpha 区域中的零,并随着画笔的 Alpha 逐渐消失而淡入现有颜色。

此页面包含可能模式的完整列表: http ://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml

于 2010-11-02T04:47:01.383 回答