0

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

//视口设置为整个窗口客户区
// m_fRectX, m_fRectY 在 OnSize 中计算并定义
// 用于图像绘制的子矩形
// m_nImageWidth, m_nImageHeight 是纹理尺寸

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();
交换缓冲区(m_hDC);

我的要求:

  1. 性能至关重要

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

  3. 需要文本和图像叠加(图标样式)。

  4. 定义覆盖位置和大小的唯一因素是窗口客户区大小(在我的情况下等于 OpenGL 视口)。

什么技术适合这种情况?

4

1 回答 1

3

使用 OpenGL 绘制文本的最高效方法是使用位图字体。这使用了小的纹理映射四边形来渲染文本。不过,它也有一些缺点。这种渲染很难(但并非不可能)从字体纹理烘焙的分辨率放大。我喜欢并使用AngelCode 的 Bitmap Font generator,但有很多类似的工具。您可以选择适合您需求的一种。

另一种选择是使用大纲字体。这可以在不损失质量的情况下放大或缩小,但使用wglUseFontOutlines

第三个也是最难的(但质量最好的)是自己渲染文本。Microsoft Research 的这篇论文有一些非常酷的技术可以在 GPU 上渲染矢量图。这篇 GPU Gems文章向我们展示了如何操作。

在性能、复杂性和质量之间有许多权衡。在决定使用其中一种之前,了解每种方法的优缺点非常重要。

于 2012-06-19T15:16:54.603 回答