如何在OpenGL的3D场景中打印字符串

4
我需要帮助在OpenGL 3D场景中打印字符串。我在使用模型视图矩阵和投影矩阵时遇到了一些问题。据我所知,投影矩阵用于场景设置,模型视图矩阵用于在场景中绘制和变换对象。因此,为了在3D场景上绘制某些内容,我认为应该执行以下步骤:
  • 设置3D场景的投影矩阵
  • 设置3D场景的模型视图矩阵
    • 绘制OpenGL内容
  • 设置2D叠加层的投影矩阵
  • 设置2D叠加层的模型视图矩阵
    • 绘制HUD的OpenGL内容
这是正确的步骤吗?

1
大多数情况下,那是正确的做法。但是你询问打印字符串的事情,OpenGL 对此没有真正的支持,所以我不确定那会有多少帮助(除非你已经将字符串光栅化为纹理了)。 - Tim
谢谢,是的,我有点困惑。 - Hermandroid
1个回答

3
对于2D渲染,您可以将投影矩阵视为画布,将模型视图视为文本位置。您需要设置如下的正交投影:

glOrtho(0.0F, 窗口宽度, 0.0F, 窗口高度, -1.0F, 1.0F);

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

glOrtho(0.0F, 窗口宽度, 窗口高度, 0.0F, -1.0F, 1.0F);

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

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

我开始使用FTGL来渲染TTF字体,但是这个库破坏了我的游戏性能。所以我决定实现自己的字体库,并选择了纹理字体,它们并不比TTF好,但对我的需求来说还可以。

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

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接