在OpenGL窗口中绘制2D叠加(文本+图标)

时间:2012-06-19 14:24:34

标签: c windows opengl

我需要在OpenGL场景上绘制2D叠加。 OpenGL用于2D动画,只是在正交投影中绘制纹理2D矩形,这是绘图代码:

// viewport is set to the whole window client area
// m_fRectX, m_fRectY are computed in OnSize and define 
// sub-rectangle for image drawing
// m_nImageWidth, m_nImageHeight are texture dimensions

glClear( GL_COLOR_BUFFER_BIT );
glEnable( GL_TEXTURE_RECTANGLE_ARB );
glBegin(GL_TRIANGLE_STRIP);

glTexCoord2d(0.0f, (float)m_nImageHeight);
glVertex2d(-m_fRectX, -m_fRectY);
glTexCoord2d((float)m_nImageWidth, (float)m_nImageHeight);
glVertex2d(+m_fRectX, -m_fRectY);
glTexCoord2d(0.0f, 0.0f);
glVertex2d(-m_fRectX, +m_fRectY);
glTexCoord2d((float)m_nImageWidth, 0.0f);
glVertex2d(+m_fRectX, +m_fRectY);

glEnd();
SwapBuffers(m_hDC);

我的要求:

  1. 效果至关重要

  2. 允许使用特定于Windows的API。

  3. 需要文字和图片叠加(图标样式)。

  4. 定义叠加位置和大小的唯一因素是窗口客户区域大小(在我的例子中等于OpenGL视口)。

  5. 哪种技术适合这种情况?

1 个答案:

答案 0 :(得分:3)

使用OpenGL绘制文本的最高效方法是使用Bitmap fonts。这使用很少的纹理映射四边形来渲染文本。它也有一些缺点。这种渲染使得从字体纹理烘焙的分辨率向上扩展变得困难(but not impossible)。我喜欢并使用AngelCode's Bitmap Font generator,但有很多像这样的工具。您可以选择一个符合您需求的产品。

另一种选择是使用Outline fonts。这可以在不损失质量的情况下调高或调低,但使用wglUseFontOutlines

第三个也是最难的(但质量最好的那个)就是自己渲染文本。微软研究院的This论文有一些很酷的技术可以在GPU上渲染矢量艺术。 This GPU Gems文章告诉我们如何。

在性能,复杂性和质量之间存在许多权衡。在决定使用其中一个之前,了解每个人的利弊是很重要的。