在 OpenGL 中快速呈现文本

Fast text rendering in OpenGL

本文关键字:文本 OpenGL      更新时间:2023-10-16

我想了解如何在OpenGL中快速呈现文本的建议。

目前,我正在读取一种真实类型的字体,并动态生成一个纹理,其中包含所有 ASCII 字符,用于使用的每种字体,每种字体大小。每个纹理仅生成一次,并保留以供以后使用。

在绘制阶段,我逐行绘制所有内容。

我在内存上有一个静态数组,计算字距调整,修改线的顶点位置和纹理坐标。然后我绑定相应的纹理并渲染线条。

不幸的是,这似乎非常缓慢。有没有更好的方法?

IMO 的最佳方法是使用距离字段。将使用更少的空间,速度快,轻松支持几种漂亮的文本效果,并且非常容易实现(特别是因为您似乎已经准备好了字体 ->纹理部分)。

将呈现的文本绘制到纹理,然后将该纹理绘制到屏幕上。 在帧之间存储纹理。您需要对删除屏幕上不再可见的文本进行一些管理,但这应该更快。

图形库通常将其抽象为一个 String 类,一旦您将其绘制到屏幕上,它就会记住它绘制的纹理,并在内部字符串更改时使其失效。

这是一个非常好且快速的库,用于使用 freetype 和 OpenGL 渲染动态文本: freetype-gl

FTGL 库可能会提供您需要的一切。

>可以使用新的opengl文本渲染库freetype-direct-gl,它使用自由字体轮廓直接渲染缩放后的字体,因此无需创建位图纹理或在CPU中进行复杂的计算。