Blending a texture to erase alpha values softly with OpenGL

余生颓废 提交于 2019-12-04 19:05:45

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!