【发布时间】:2011-12-15 23:00:31
【问题描述】:
我正在尝试使用 FTGL 字体库来创建纹理映射字体并将其渲染到屏幕上。该库以GL_ALPHA 格式创建一个纹理来保存字体字形,然后当您告诉它渲染一个字符串时,它会通过glBegin(GL_QUADS) 并渲染每个字形,这正是您所期望的。
唯一的问题是,我没有收到任何文本。在一种情况下,我得到纯黑框而不是文本,在另一种情况下,我什么也得不到。我已经在 gDEBugger 下运行了代码,以确保纹理被正确上传和设置,并且一切正常,但我仍然没有看到任何输出。
我已经尝试了明显的东西。事先调用glColor 尝试设置文本颜色没有任何作用。也没有尝试确保 alpha 混合能够正常工作,如下所示:
glEnable(GL_ALPHA_TEST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
有人知道我缺少什么,以便正确显示从GL_ALPHA 纹理到屏幕的渲染吗?
【问题讨论】:
-
"库创建 GL_ALPHA 格式的纹理来保存字体字形" 真的吗?它不允许您选择要使用的格式吗?如果没有,那很不幸,因为 GL 3.1 核心及更高版本不再具有 GL_ALPHA 纹理。
-
@Nicol:是的,真的,那又怎样?我不知道任何显卡的驱动程序只实现核心而忽略向后兼容性。这将是一个非常愚蠢的举动,制造商知道这一点。
-
MacOSX 10.7 没有实现兼容性。您可以选择 2.1 或 3.2 core。即使忽略它依赖于已删除内容的事实,它仍然应该为您提供一些关于您想要的格式的选项。因为它们使用 GL_ALPHA,所以您必须付出大量努力才能使其适用于纹理环境和颜色(见下文)。如果他们只是像大多数人所期望的那样使用 GL_INTENSITY,您可以只使用 GL_MODULATE 和
GL_ONE、GL_ONE_MINUS_SRC_ALPHA的混合模式。