【问题标题】:QOpenGLWindow z-order issuesQOpenGLWindow z 顺序问题
【发布时间】:2019-11-12 20:10:58
【问题描述】:

我正在为客户更新应用程序。

他们使用 Qt,目前使用 QGLWidget 来显示通过单击相应单选按钮选择的 4 个可能摄像机中的 1 个的全屏视图。然后他们使用 OpenGL 在显示的图像上绘图。这很好用,但他们想更新 UI 以包含所有 4 个摄像头的四分割视图。

我对如何实现这一点的第一个想法是保留一个 QGLWidget 用于全屏显示,并有 4 个小的 QGLWidget 用于四分割。从文档中我发现您不能重叠 QGLWidgets 或 QOpenGLWidgets,因为它们不能正确处理 z 顺序,但这可以通过使用 QOpenGLWindows 和 QWidget::createWindowContainer 来完成。

所以,我编写了一个应用程序,该应用程序使用 QOpenGLWidget(试图使它们更新)用于全屏视图,并使用 QWidget::createWindowContainer 编写了 4 个较小的 QOpenGLWindows,但这也不起作用。

从 QOpenGLWindows 构建的小部件始终位于顶部,即使我使用 lower() 试图将它们放在全屏 QOpenGLWidget 后面。我也尝试在从 QOpenGLWindows 构建的小部件上使用 hide(),但是,这没有任何效果。

【问题讨论】:

  • 显示(至少部分)您的代码将帮助其他人更快地找到错误。

标签: c++ qt opengl qglwidget qopenglwidget


【解决方案1】:

在较低级别执行此操作。保留一个 QGLWidget——事实上不要碰你的 Qt 对象。相反,更改较低级别的呈现,使其对 glViewport 进行 4 次调用。

每次调用glViewport后,根据感兴趣的相机更新模型视图和投影和矩阵,然后绘制3D场景。

这既简单又高效,因为驱动程序只需要处理单个 OpenGL 上下文。您可能需要做一些额外的工作来调整鼠标输入,但我认为这是值得的。

【讨论】:

  • 谢谢!这是处理它的好方法!
猜你喜欢
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2011-01-18
  • 2012-12-24
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多