问题
I have a little paint application which was based on the GLPaint sample code. It is working fine. My Problem is that I need to implement a "brush" that erases the textures which were already drawn.
My goal is to have an eraser which has soft edges. Right now I just took the same texture which I used for drawing but switched the blending functions from
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
to
glBlendFunc(GL_ZERO, GL_ZERO);
The result is a square rectangular eraser. That is ok but it's not what I actually want. I need soft edges. I want to make a round eraser not a square rectangular.
Do you have any guess how to achieve that? Or do you know if there is a way to create my own custom blending function?
回答1:
Do you know the background color of the texture? If so, instead of "erasing", you could simply paint background over it. That would be somewhat simpler, as you would only change the color and not the blending mod.
If you need to do it with blending, try:
glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
This will use the zero in area of full alpha, and fade back into the existing color as the brush's alpha fades off.
This page contains a full list of possible modes: http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml
来源:https://stackoverflow.com/questions/4074955/blending-a-texture-to-erase-alpha-values-softly-with-opengl