我正在实现一个基于 OpenGL 的 GUI。我遇到了每个 GUI 都会遇到的问题——文本渲染。我知道在 OpenGL 中呈现文本的几种方法,但是,我想知道哪种方法最适合 GUI。
通常在 GUI 中我们有两种类型的文本——静态的和实时的。静态很容易——我们可以将一个 TTF 渲染到一个纹理上然后忘记它。更让我困扰的是“实时”文本——想象一下控制台,或者多人游戏中的实时聊天。
我想到了几个选择:
- 没有特殊情况 - 每次文本更改时渲染和加载纹理,请记住仅在实际出现新文本时重新渲染它,并尝试将较大的文本分成小部分(如每个聊天行)。然而,这仍然会让我们陷入困境,比如一直在变化的分数线,或者呈现“每个字符”的介绍文本(在某些科幻游戏中看到的打字机风格)
- 四字符 - 这似乎也是一个流行的解决方案,您使用 ASCII 表准备纹理并渲染纹理四字符。但是,我严重怀疑这种解决方案的效率。如何加快速度的提示也将受到欢迎。
- 混合解决方案——但是我不知道如何干净地实现它
因此问题是——如何有效地在 OpenGL 中渲染文本?
如果这有帮助,我正在使用 STL/Boost-heavy C++ 进行编码,并针对 GForce 6 及更高版本的显卡。