Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blending a texture to erase alpha values softly with OpenGL

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?

like image 840
Hung Dang Avatar asked Feb 04 '23 01:02

Hung Dang


1 Answers

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

like image 200
ssube Avatar answered Feb 05 '23 15:02

ssube