4

我需要一些帮助才能在 opengl 3d 场景上打印字符串。我在使用模型视图矩阵和投影矩阵时遇到了一些问题。据我了解,投影矩阵用于场景设置,模型视图矩阵用于绘制和转换场景中的对象。所以,要在 3D 场景上绘制一些东西,我知道下一个过程最需要完成:

  • 为 3d 场景设置投影矩阵
  • 为 3d 场景设置模型视图矩阵
    • 画opengl的东西
  • 为 2d 叠加设置投影矩阵
  • 为 2d 叠加设置模型视图矩阵
    • 为 hud 绘制 opengl 的东西

这是正确的程序吗?

4

1 回答 1

3

对于 2D 渲染,您可以将投影矩阵视为画布,将 movelview 视为文本的位置。您想像这样设置正交投影:

glOrtho(0.0F, windowWidth, 0.0F, windowHeight, -1.0F, 1.0F);

使用此投影,每个单位意味着一个像素 (glTranslate2f(120.0, 100.0) 会将您的文本定位在像素 (120, 100)。此投影映射屏幕左下角的 (0,0)。如果您想将其映射到左上角,您可以执行以下操作:

glOrtho(0.0F, windowWidth, windowHeight, 0.0F, -1.0F, 1.0F);

至于如何渲染文本,OpenGL 默认不支持它,这意味着您必须创建字体渲染库或使用现有的渲染库。在此之前,您需要牢记您对文本渲染的需求:是平面还是 3D?它将是静态的或转换的(缩放、旋转)等。

在这里你可以找到关于 opengl 文本渲染技术的调查,包括优缺点和库: http ://www.opengl.org/archives/resources/features/fontsurvey/

我开始使用 FTGL 来渲染 TTF 字体,但是 lib 正在破坏我的游戏性能。所以我决定实现我自己的字体库并使用纹理字体,它并不比 TTF 好,但它可以满足我的需要。

我使用了这个程序:http ://www.angelcode.com/products/bmfont/ 它采用 TTF 字体并导出纹理和文件描述符,其中包含您将用于渲染的纹理中的每个字母位置、大小和填充。

希望有帮助。

于 2012-05-31T23:03:48.077 回答