当前位置: 首页 > 知识库问答 >
问题:

在OpenGL窗口中绘制二维叠加(文本图标)

祖利
2023-03-14

我需要在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视口)。

    什么技术适合这种情况?

  • 共有1个答案

    申嘉慕
    2023-03-14

    使用OpenGL绘制文本的最有效方法是使用位图字体。这使用小的纹理映射四边形来渲染文本。不过它也有一些缺点。这种渲染使得很难(但并非不可能)从字体纹理的分辨率放大。我喜欢并使用AngelCode的位图字体生成器,但是有很多像这样的工具。你可以选择一个适合你需要的。

    另一种选择是使用Outline字体。这可以在不损失质量的情况下调整大小,但使用wglUseFontOutline。

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

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

     类似资料:
    • 问题内容: 我刚刚使用突触软件包系统在Ubuntu 9.10中安装了matplotlib。但是,当我尝试以下简单示例时 我没有绘图窗口。关于如何显示绘图窗口的任何想法? 问题答案: 您可以输入 或更好,请使用。 由于 不再建议使用,因此如今的解决方案是

    • 我写了一个< code>OpenGL代码用于在屏幕上渲染图像。我使用< code>GLUT来创建一个窗口和回调,但是我想在< code>win32窗口中而不是在< code>GLUT中呈现图像,基本上我们有一个< code > CreateWindowEx() API来在< code>win32中创建窗口,并且我们有一个< code>HWND(句柄),以便我们可以将此句柄传递给< code>HDC

    • 问题内容: 在编写使用matplotlib的脚本时,我在运行脚本时会暂时获得一个交互式图形窗口,该窗口会在查看图之前立即消失。如果我在iPython中以交互方式执行相同的代码,则制图窗口将保持打开状态。运行脚本时,如何使matplotlib在生成图形时使图形保持打开状态? 例如,我可以保存该图,但是不能使用来显示它: 问题答案: 根据文档,您可以传递一个实验参数。当然,如果您的matplotlib

    • 问题内容: 我正在寻找有关如何在JPanel中绘制文本的最基本描述。我知道那里有十亿个教程,但是没有一个在我身边点击,我有一些具体的问题可能会帮助其他困惑的人。作为设置(测试应用程序),我有一个类,其中包含JLabel,JTextField,JButton和JPanel。该应用程序从一个外部文件中读取整数,并且在按下JButton时应在面板中显示其平均值。我已经整理了所有基础编程(即按钮响应并将平

    • 问题内容: 有没有办法总是在任何android应用程序顶部绘制覆盖窗口? 我正在使用Android x86端口并具有系统权限。 @Edit:叠加层下方的视图应接收所有事件。 问题答案: 可以通过创建一个在当前视图中添加视图的方法来做到这一点: 但是您需要以下额外权限: 然后只需在清单中注册服务: 并启动它:

    • 我通过GLX在Linux中编写了一个OpenGL应用程序。它使用双缓冲与glXSwapBuffers和同步到VBlank设置通过NVIDIA X服务器设置设置。我正在使用Compiz,并且可以平滑地移动窗口并且没有撕裂(在Compiz设置中启用了同步到VBlank)。但当我 > 尝试移动 OpenGL 窗口或调整其大小,或 通过OpenGL窗口占用的区域移动其他窗口 系统断断续续,停顿3-4秒。将