2012-09-09 122 views
1

我正在使用引擎(http://b2dengine.com/)来实现我的游戏创意,这已经在进行中。现在很长一段时间,我对这个文本呈现问题感到困惑。如何覆盖opengl中的纹理颜色?

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

我正在使用这个gl混合函数来获得所需的效果。

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

在大多数情况下,只要颜色有点暗,就可以工作。但是当它变成白色时,我可以看到文物。如果需要,我可以提供截图。 也为了这个工作,纹理中的“文本”必须是白色的。

我使用opengl 1.1(是的,我知道它的旧,但我只是没有为着色器做好准备)。

所以总之,我的问题是:如何渲染纹理并完全替换颜色?只保留Alpha通道。 例如如果它的黑色和80%透明PNG,当我渲染我想要它在屏幕上80%的透明度绿色。

回答

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

+0

我不知道这个帖子是什么版本GL的作者使用但是glTexEnv现在已被弃用。请阅读:http://www.opengl.org/wiki/Common_Mistakes:_Deprecated#glTexEnvi。并特别注意这一行:“同时请记住,glTexEnvi在片段着色器是绑定的。“ –

+0

@MichaelIV,我同意它已被弃用,但OP明确表示他使用的是非常老的opengl(1.1) – Tim

+0

啊是啊,我没有看到它。对他太糟糕了;) –