我想要关于如何在 OpenGL 中快速渲染文本的建议。
目前,我正在阅读一种真正的字体并动态生成包含所有 ASCII 字符的纹理,对于使用的每种字体,对于使用的每种字体大小。每个纹理只生成一次并保留以供以后使用。
在绘图阶段,我逐行绘制所有内容。
我在内存上有一个静态数组,计算字距等,修改线条的顶点位置和纹理坐标。然后我绑定相应的纹理并渲染线条。
不幸的是,这似乎很慢。有没有更好的办法?
IMO 最好的方法是使用距离场。将使用更少的空间,速度更快,轻松支持几种漂亮的文本效果,并且非常容易实现(特别是因为您似乎已经准备好字体 -> 纹理部分)。
将渲染文本绘制到纹理上,然后将该纹理绘制到屏幕上。存储帧之间的纹理。您需要对删除屏幕上不再可见的文本进行一些管理,但这应该更快。
图形库通常将其抽象为 String 类,一旦将其绘制到屏幕上,它就会记住它绘制的纹理,并在内部字符串更改时使其无效。
这是一个非常好的和快速的库,用于使用 freetype 和 OpenGL 渲染动态文本:freetype-gl
The FTGL library would probably provide everything you need.
您可以使用新的opengl文本渲染库freetype-direct-gl
,它使用freetype字体轮廓直接渲染缩放后的字体,因此无需创建位图纹理或在CPU中进行复杂的计算。