2012-03-20 241 views
1

我目前有一个纹理服务字体,这是在OpenGL的最上面(最后)呈现为iPhone。纹理是带有透明环绕的白色字形。我的目标是在纹理上叠加另一种颜色,有效地改变字体颜色。OpenGL ES 1.1颜色在字体纹理

使用下面的代码,我可以在纹理上做出纯色,只要alpha设置为255即可。我的目标是逐渐淡出颜色,所以我的目标是显示颜色(0,0,255,127) 。这应该是一个部分透明的蓝色。不过,我已经尝试了很多次与glTexEnv()设置,似乎无法使非纯色覆盖。

glBlendFunct(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_BLEND); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, fontTexture); 
glColorub(0,0,255,255); 
... 
glDrawElements(...); 

我试图在http://www.opengl.org/wiki/Texture_Combiners OpenGL的wiki页面的建议中,的标题下的“范例:混合基于tex0的阿尔法tex0和tex1”。我也尝试了这里发现的想法OpenGL ES 1.1: How to change texture color without losing luminance?

如果有任何设置,我可以使颜色(0,0,255,127)存在,而不会丢失字体/字符的轮廓?

PS。另一个想法是为前面的例子传递一个预先倍增的alpha颜色(例如(0,0,255 *(127/256),127)),但这看起来不太优雅。

编辑:只是为了澄清,我打算为字符纹理保留完全不透明度,只是为了颜色叠加改变。因此,该示例应该从全蓝变为全白。

回答

0

我认为你必须改变glBlendFunc参数(BTW glBlendFunct中有一个错字)。

看看这个: http://pyopengl.sourceforge.net/documentation/manual/glBlendFunc.3G.html

对我来说,将其设置为:

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

作品。

希望它有帮助...

+0

感谢您的回答Beppe。不幸的是,这与上述结果类似。如果我尝试(0,0,255,40),整个纹理变得几乎透明。如果可以的话,所需的结果是背景纹理(全255字母),顶部为浅蓝色。因此对于用户来说,颜色是浅蓝色的,但是角色是完全不透明的。 – Overflowed 2012-03-21 05:01:02

+0

嗯......我仍然认为你应该通过glBlendFunc来实现你的目标。您是否尝试过与其他可能的参数一起玩耍? – Beppe 2012-03-21 10:13:39