【问题标题】:OpenGL ES 1.1 Color over Font TextureOpenGL ES 1.1 字体纹理上的颜色
【发布时间】:2012-04-04 18:22:06
【问题描述】:

我目前有一个为字体提供服务的纹理,它位于 iPhone 的 OpenGL 中最顶层(最后一个)渲染。纹理是带有透明环绕的白色字形。我的目标是在纹理上覆盖另一种颜色,有效地改变字体颜色。

使用下面的代码,我可以在纹理上制作纯色,前提是 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(...);

我已经尝试了 OpenGL wiki 页面 http://www.opengl.org/wiki/Texture_Combiners 上的建议,标题为 “示例:基于 tex0 的 alpha 混合 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)),但这似乎不太优雅。

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

【问题讨论】:

    标签: iphone opengl-es colors fonts textures


    【解决方案1】:

    我认为您必须更改 glBlendFunc 参数(顺便说一下,glBlendFunct 中有错字)。

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

    对我来说,将其设置为:

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

    有效。

    希望对你有帮助...

    【讨论】:

    • 感谢您的回答贝佩。不幸的是,这具有与上述类似的结果。如果我尝试 (0,0,255,40),整个纹理变得几乎透明。如果可以的话,需要的结果是背景纹理(完全 255 alpha),顶部是浅蓝色。因此对于用户来说,颜色是浅蓝色,但字符是完全不透明的。
    • 嗯...我仍然认为您应该通过 glBlendFunc 实现您的目标。您是否尝试过使用其他可能的参数?
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多