【发布时间】:2019-04-22 06:49:11
【问题描述】:
我想使用 OpenGLES 在白色背景上使用我选择的颜色的纹理画笔进行绘制。
我有一个位图图像,我使用 CG 加载并转换为纹理。这个位图大部分是黑色的,但在中心有一个我想用作“画笔”的白色圆圈。换句话说,我希望黑色部分在最终合成中消失,但白色部分呈现我使用 glColor 设置的颜色。
在设置一些不透明的亮色后,我能得到的最好的结果是使用混合参数(GL_SRC_ALPHA、GL_ONE)是灰色(不是纯白色背景)上的褪色线。但是当我将背景设置为纯白色时,这条线是不可见的。
至少在目前的情况下,原始纹理的黑边不会出现。我尝试的大多数其他混合组合要么导致即使在灰色上也没有任何显示,或者看到包括黑色边缘在内的整个画笔,这是不好的。
是否有人愿意向我解释我应该如何设置我的纹理和/或 GL 状态以使明亮的颜色在纯白色上显示出来,而不显示黑色纹理边缘?这可能是一个新手问题,但我已经尝试过混合数学,但我仍然不明白颜色是如何被组合在一起的。
这是我用作画笔的图像:
alt text http://www.coldcoffeeandjuice.com/OpaqueBrush.png
这是一些结果输出,当背景为灰色,glColor4f 设置为 (1, 0, 0, 1),例如纯红色,并且画笔用于一堆连续的 GL_POINT 时。请注意,这样做的好处是只有画笔图像的白色部分显示为红色——没错。不好的部分是我想要纯净明亮的红色由于与背景(?)和/或画笔的白色(?)混合而变得苍白,因此如果背景是纯白色,它就会完全消失.这使用了上面给出的混合参数 (src_alpha, one)。
考虑到纯红色,这就是我想看到的(感谢 Paintbrush):
谁能帮我理解我做错了什么?
谢谢!
【问题讨论】:
-
你能发布一些图片来展示你期望看到的和你实际看到的吗?
-
完成。如果我在这里遗漏任何重要信息,请告诉我。我是一名优秀的程序员,但对图形数学和 GL 状态有点陌生。
-
嗨,Ben,我也在寻找这个解决方案,但我无法使用示例应用程序“GLPaint”获得正确的结果。你能分享你设置OpenGL环境的代码部分吗?
-
我和奇怪的99在同一条船上。我对 OpenGL 完全陌生,我正在尝试通过逆向工程 GLPaint 在白色背景上绘图。我已经完成了您上面建议的操作,而且我已经完成了 glBlendFunc 的所有组合,以及我能想到的画笔纹理的几乎所有组合(白底黑字、黑底白字、反白底白、别名/否)别名等)。我能达到的最好效果是使用白色反式圆圈,glBlendFunc 如上所述(GL_ SRC_ ALPHA,GL_ ONE_ MINUS_ SRC_ ALPHA),但这仍然给我一个暗淡的颜色,半反式外部位被解释为