visual-studio-2008 - glutBitmapCharacter() 太慢了,有没有在 OpenGL 程序中使用字体的替代方法?

标签 visual-studio-2008 opengl freeglut freetype

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

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

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

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

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

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

最佳答案

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

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

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

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

关于visual-studio-2008 - glutBitmapCharacter() 太慢了,有没有在 OpenGL 程序中使用字体的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134627/

相关文章:

visual-studio-2008 - 如何(visual studio 2008/Resharper)重构/自动化混合模式

c# - VS2008 中有没有办法在 watch 或快速 watch 中搜索特定值?

c++ - OpenGL 顶点缓冲区对象不显示

c++ - 在 C++ 中更新静态函数中的非静态成员

c++ - VS2012 寻找 64 位 dll 而不是 32 位

c++ - 如何使用 glRotatef 围绕对象的局部(非全局)轴执行旋转?

c++ - shobjidl.h 中的第二个 C 链接

c++ - 如何在C++中使用OSVR?

c++ - 未定义对 `__imp___glutInitWithExit' 等的引用,但库已链接

visual-studio-2008 - 如何集成 FxCop 和 VS 2008?