如何覆盖opengl中的纹理颜色?

时间:2012-09-09 19:26:56

标签: opengl texture2d text-rendering

我正在研究引擎(http://b2dengine.com/)来实现我的游戏理念,该理念已在进行中。现在很长一段时间我都遇到了文本渲染这个问题。

我有纹理图集,其中包含单个png图像中所有支持/需要的字符。字符映射由Font类定义。 一切正常,字符正确,准确地呈现。事情是我还需要能够改变文本的颜色。 这听起来,我敢打赌这很简单,但我不能让它发挥作用。

我正在使用这个gl混合功能来获得理想的效果。

GL.instance.glBlendFunc(GL.instance.GL_SRC_ALPHA, GL.instance.GL_ONE_MINUS_SRC_ALPHA);

在大多数情况下,只要颜色有点暗,它就能正常工作。但当它设置为白色时,我可以看到文物。如果需要,我可以提供截图。 此外,为了使其工作,纹理中的“文本”必须是白色的。

我正在使用opengl 1.1(是的,我知道它已经老了,但我还没有为着色器做好准备)。

简而言之,我的问题是:如何渲染纹理并完全替换颜色?只保留alpha通道。 例如。如果它的黑色和png中的80%透明,当我渲染时,我希望它在屏幕上的透明度为80%时为绿色。

1 个答案:

答案 0 :(得分:1)

认为这会起作用,虽然这些是一些古老的弃用函数,我不再记得太多了。

如果纹理单元处于活动状态且具有文本纹理,请尝试设置以下选项:

glTexEnv(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnv(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnv(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PRIMARY_COLOR);
glTexEnv(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);

我相信这会用输入的片段颜色(glColor)替换片段的RGB,并完全忽略纹理的RGB通道。话虽如此,如果你刚开始上传一个alpha通道纹理,那将会好很多。

请务必检查错误,如果错误无效,您可以看看我是否从这里抓错了:http://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml