1

我正在开发引擎 (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% 的透明度呈现绿色。

4

1 回答 1

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

于 2012-09-09T22:17:37.640 回答