【问题标题】:glutBitmapCharacter() is too slow, any alternatives for using fonts in OpenGL program?glutBitmapCharacter() 太慢了,在 OpenGL 程序中使用字体的任何替代方法?
【发布时间】:2013-04-21 18:21:45
【问题描述】:

我正在开发一个 3D 应用程序,试图在屏幕上渲染一些文本。

但如果文本超过 10 个字符,则 FPS 会下降到 2,这真的很烦人。

我的程序经常使用 glutPostRedisplay() 函数,这就是为什么它肯定会变慢。

有什么方法可以让我的程序使用 glutBitmapCharacter() 显示字体并且没有任何延迟。

我在 win7 x64 上使用 VC++ 2008。

PS:我尝试在 VC++ 中安装 Freetype for OpenGL,但最终放弃了。 如果我指出一些在 VC++ 2008 中安装任何字体库的“白痴”指南,我也将不胜感激。

【问题讨论】:

  • 我认为问题可能出在 freeglut 库上。每次调用 glutPostRedisplay() 时,它都不应该重新渲染屏幕。我遇到了同样的问题
  • 非常感谢伙计,你有没有遇到任何解决方案:)
  • 不经常打电话给glutPostRedisplay() :(
  • 我得到了解决方案,我想是的,它至少对我的程序有效。当我调用 glutInitDisplayMode() 作为其参数之一时,我在代码中启用了多重采样,我将其删除,然后我恢复了 FPS。我仍然像以前一样调用 glutPostRedisplay()。

标签: visual-studio-2008 opengl freeglut freetype


【解决方案1】:

如果您不需要矢量字体,那么文本显示的简单方法是使用位图字体纹理(固定间距样式)。您可以通过从 GDI 渲染来自己创建字体图像,或者在 MSPaint 中手动编辑它...或从 inet 下载

对于简单的文本,我现在使用 16x16 像素字体,...在图像中组织为 16x16 字符数组(纹理应该是正方形大小,因此您不需要使用扩展名)。

通过混合,您可以实现类似字符和/或透明度的精灵 使用 glColor 您可以更改文本和/或 alpha 的颜色 以这种方式呈现最好看的文本是使用非透视投影矩阵 和纹理过滤 GL_LINEAR。

当然你必须编写你的 char 和 text 绘制函数,但它们并不复杂(char 是简单的方形四边形,你只需要从 ASCII 计算纹理坐标,文本是单一的,用于调用 char 和位置更新)

【讨论】:

  • 您提到的关于使用图像作为角色的有趣想法,我可以将图像信息放在一个数组中,然后可以按照我想要的方式检索它。无论如何,正如我之前提到的,我通过从 glut 函数调用中删除 GLUT_MULTISAMPLE 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2016-11-23
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多