如何在白色背景上的Open GL ES中显示彩色纹理画笔?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在白色背景上的Open GL ES中显示彩色纹理画笔?相关的知识,希望对你有一定的参考价值。

我想使用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)。

alt text (来源:coldcoffeeandjuice.com

这是我想看到的,给出纯红色(感谢Paintbrush):

alt text (来源:coldcoffeeandjuice.com

谁能帮我理解我做错了什么?

谢谢!

答案

好的,所以你试图将一个给定的颜色(在这种情况下是“红色”)“涂抹”到背景上,使用一个掩模作为画笔形状。

在开始渲染“paint”之前,您需要执行以下操作:

  1. 首先确保您的画笔具有与其形状对应的Alpha通道 - 即Alpha通道应该与您提供的画笔图像类似。
  2. 使用这些状态设置渲染(注释空间以绕过wiki标记):
// Make the current material colour track the current color
glEnable( GL_COLOR_MATERIAL );

// Multiply the texture colour by the material colour.
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

// Alpha blend each "dab" of paint onto background
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

也可以看看: http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/colormaterial.html

http://www.khronos.org/opengles/documentation/opengles1_0/html/glTexEnv.html

以上是关于如何在白色背景上的Open GL ES中显示彩色纹理画笔?的主要内容,如果未能解决你的问题,请参考以下文章

彩色的CAD图纸转换成白色背景图片如何操作?

画出特殊的背景

编译c ++项目/ Open GL时出现纹理错误

电脑屏幕变成黑白色的了!如何调成彩色的呢?谢谢

怎么将彩色的CAD图纸转换成白色背景的PDF格式呢?

在 iOS 上的 OpenGL ES 着色器中混合多个纹理会导致反向行为