1

我想尝试为我现有的 OpenGL 应用程序实现一些 HCI。如果可能的话,菜单应该出现在我的背景中的 3D 图形前面。

我正在考虑直接在“相机”前面绘制一个正方形,然后在“基础”正方形的顶部绘制纹理或更多基元。

当菜单处于活动状态时,相机不能移动,因此相机不会从菜单上移开。

这听起来对任何人来说都太过分了,还是我走在正确的轨道上?其他人会怎么做?

4

4 回答 4

1

我只是glPushMatrixglLoadIdentity做你的画,然后glPopMatrix不用担心你的相机在哪里。

您还需要禁用和重新启用深度测试、照明等

于 2009-04-01T21:43:40.840 回答
1

GLUI库可以做到这一点(没有个人经验)
或者如果您使用 Qt,则有一些方法可以在 OpenGL 模型之上透明地渲染 Qt 小部件,还有在 opengl 中渲染所有 Qt 的 beta 支持。

于 2009-04-01T22:01:09.457 回答
1

您还可以进行所有 3D 渲染,然后切换到正交投影并绘制所有菜单对象。这比按照您的建议将其全部放在一个大型广告牌四边形上要容易得多。

查看此摘录,特别是标题“投影变换”。

于 2009-04-03T00:08:00.353 回答
1

如此处所述,您需要在 x 和 y 中应用 0.375 的平移来获得像素完美对齐:

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);
/* render all primitives at integer positions */

算法很简单:

  1. 绘制您的 3D 场景,大概启用深度测试。
  2. 禁用深度测试,以便您的 GUI 元素将覆盖 3D 内容。
  3. 使用 glPushMatrix 来存储您当前的模型视图和投影矩阵(假设您想要恢复它们 - 否则,就胜过它们)
  4. 如上述代码中所述设置模型视图和投影矩阵
  5. 绘制你的 UI 东西
  6. 使用 glPushMatrix 恢复您推送的矩阵(假设您推送了它们)

这样做会使相机位置变得无关紧要 - 事实上,随着相机的移动,3D 部分会正常受到影响,但 2D 叠加层会保持原位。我期待这是您想要的行为。

于 2009-04-03T00:47:01.680 回答