我想尝试为我现有的 OpenGL 应用程序实现一些 HCI。如果可能的话,菜单应该出现在我的背景中的 3D 图形前面。
我正在考虑直接在“相机”前面绘制一个正方形,然后在“基础”正方形的顶部绘制纹理或更多基元。
当菜单处于活动状态时,相机不能移动,因此相机不会从菜单上移开。
这听起来对任何人来说都太过分了,还是我走在正确的轨道上?其他人会怎么做?
我只是glPushMatrix
,glLoadIdentity
做你的画,然后glPopMatrix
不用担心你的相机在哪里。
您还需要禁用和重新启用深度测试、照明等
有GLUI库可以做到这一点(没有个人经验)
或者如果您使用 Qt,则有一些方法可以在 OpenGL 模型之上透明地渲染 Qt 小部件,还有在 opengl 中渲染所有 Qt 的 beta 支持。
您还可以进行所有 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 部分会正常受到影响,但 2D 叠加层会保持原位。我期待这是您想要的行为。