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

时间:2012-05-30 21:31:20

标签: string opengl fonts bitmap

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

  • 设置三维场景的投影矩阵
  • 设置3D场景的模型视图矩阵
    • 绘制opengl的东西
  • 设置2d覆盖的投影矩阵
  • 设置2d覆盖的模型视图矩阵
    • 为了hud绘制opengl的东西

这是正确的程序吗?

1 个答案:

答案 0 :(得分: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字体并导出纹理和文件描述符,其中包含用于渲染的纹理中的每个字母位置,大小和填充。

希望有所帮助。