在OpenGL中实现HCI的好方法是什么?

时间:2009-04-01 21:27:58

标签: opengl hci

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

我想在“相机”前面直接画一个正方形,然后在“基座”正方形的顶部绘制纹理或更多的原型。

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

这听起来对任何人来说都是远远不够,还是我在正确的轨道上?其他人怎么做呢?

4 个答案:

答案 0 :(得分:1)

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

您还需要禁用并重新启用深度测试,灯光等

答案 1 :(得分:1)

GLUI图书馆这样做(没有个人经验)
或者如果你使用Qt,有办法在OpenGL模型上透明地渲染Qt小部件,还有beta支持在opengl中渲染所有Qt。

答案 2 :(得分:1)

您也可以进行所有3D渲染,然后切换到正交投影并绘制所有菜单对象。如你所建议的那样,将它全部放在大型广告牌四元组上要容易得多。

查看this exerpt,特别是“投影转换”标题。

答案 3 :(得分:1)

如上所述here,您需要在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. 中的说明设置模型视图和投影矩阵
  6. 绘制您的UI内容
  7. 使用glPushMatrix恢复推送的矩阵(假设你推了它们)
  8. 这样做会使相机位置无关紧要 - 实际上,随着相机移动,3D部件将受到正常影响,但2D覆盖仍然保持不变。我期待这是你想要的行为。