我需要在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);
我的要求:
效果至关重要。
允许使用特定于Windows的API。
需要文字和图片叠加(图标样式)。
定义叠加位置和大小的唯一因素是窗口客户区域大小(在我的例子中等于OpenGL视口)。
哪种技术适合这种情况?
答案 0 :(得分:3)
使用OpenGL绘制文本的最高效方法是使用Bitmap fonts。这使用很少的纹理映射四边形来渲染文本。它也有一些缺点。这种渲染使得从字体纹理烘焙的分辨率向上扩展变得困难(but not impossible)。我喜欢并使用AngelCode's Bitmap Font generator,但有很多像这样的工具。您可以选择一个符合您需求的产品。
另一种选择是使用Outline fonts。这可以在不损失质量的情况下调高或调低,但使用wglUseFontOutlines。
第三个也是最难的(但质量最好的那个)就是自己渲染文本。微软研究院的This论文有一些很酷的技术可以在GPU上渲染矢量艺术。 This GPU Gems文章告诉我们如何。
在性能,复杂性和质量之间存在许多权衡。在决定使用其中一个之前,了解每个人的利弊是很重要的。