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

在OpenGL中实现HCI的好方法是什么?,opengl,hci,Opengl,Hci,我想尝试为我现有的OpenGL应用程序实现一些HCI。如果可能的话,菜单应该出现在我的3D图形的前面,这将是在背景中 我想直接在“相机”前面画一个正方形,然后在“基础”正方形的顶部画纹理或更多的灵长类动物 菜单处于活动状态时,相机无法移动,因此相机不会从菜单向外看 这听起来是不是太让人着迷了,还是我走对了方向?其他人会怎么做?我只想glPushMatrix,glLoadIdentity,画你的画,然后glPopMatrix,不用担心你的相机在哪里 您还需要禁用并重新启用深度测试、照明等功能,我只

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

我想直接在“相机”前面画一个正方形,然后在“基础”正方形的顶部画纹理或更多的灵长类动物

菜单处于活动状态时,相机无法移动,因此相机不会从菜单向外看


这听起来是不是太让人着迷了,还是我走对了方向?其他人会怎么做?

我只想
glPushMatrix
glLoadIdentity
,画你的画,然后
glPopMatrix
,不用担心你的相机在哪里


您还需要禁用并重新启用深度测试、照明等功能,我只需
glPushMatrix
glLoadIdentity
,绘制图形,然后
glPopMatrix
,而不必担心相机的位置

您还需要禁用并重新启用深度测试、照明等功能。有库可以执行此操作(无个人体验)
或者,如果您使用的是Qt,则可以在OpenGL模型上透明地呈现Qt窗口小部件,也可以在OpenGL中呈现所有Qt。

有库可以做到这一点(无个人体验)

或者,如果您使用的是Qt,则可以在OpenGL模型上透明地呈现Qt窗口小部件,也可以在OpenGL中呈现所有Qt。

您还可以进行所有3d渲染,然后切换到正交投影并绘制所有菜单对象。这比你建议的把所有的东西都放在一个巨大的广告牌上要容易得多


查看标题“投影变换”。

您也可以进行所有3d渲染,然后切换到正交投影并绘制所有菜单对象。这比你建议的把所有的东西都放在一个巨大的广告牌上要容易得多

查看标题“投影变换”。

如前所述,您需要在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 */
算法很简单:

  • 绘制3D场景,可能启用了深度测试
  • 禁用深度测试,这样您的GUI元素将覆盖3D内容
  • 使用glPushMatrix存储当前模型视图和投影矩阵(假设您要恢复它们-否则,只需对它们进行处理)
  • 按照上述代码中的说明设置模型视图和投影矩阵
  • 绘制您的UI内容
  • 使用glPushMatrix恢复推送矩阵(假设您推送了它们)
  • 这样做会使摄影机的位置变得无关紧要-事实上,随着摄影机的移动,3D部分会像正常情况一样受到影响,但2D覆盖层会保持不变。我希望这是您想要的行为。

    如前所述,您需要在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 */
    
    算法很简单:

  • 绘制3D场景,可能启用了深度测试
  • 禁用深度测试,这样您的GUI元素将覆盖3D内容
  • 使用glPushMatrix存储当前模型视图和投影矩阵(假设您要恢复它们-否则,只需对它们进行处理)
  • 按照上述代码中的说明设置模型视图和投影矩阵
  • 绘制您的UI内容
  • 使用glPushMatrix恢复推送矩阵(假设您推送了它们)
  • 这样做会使摄影机的位置变得无关紧要-事实上,随着摄影机的移动,3D部分会像正常情况一样受到影响,但2D覆盖层会保持不变。我希望这是你想要的行为