QOpenGLWindow z 顺序问题
QOpenGLWindow z-order issues
我正在为客户更新应用程序。
他们使用 Qt,目前使用 QGLWidget 来显示通过单击相应的单选按钮选择的 4 个可能的摄像机之一的全屏视图。然后他们使用 OpenGL 在显示的图像上绘图。这很好用,但他们想更新 UI 以包含所有 4 个摄像头的四分割视图。
关于如何实现这一点,我的第一个想法是保留一个 QGLWidget 用于全屏显示,并有 4 个小 QGLWidgets 用于四分屏。从文档中我发现您不能重叠 QGLWidgets 或 QOpenGLWidgets,因为它们没有适当地处理 z 顺序,但这可以通过使用 QOpenGLWindows 和 QWidget::createWindowContainer 来完成。
因此,我编写了一个应用程序,该应用程序使用 QOpenGLWidget(试图使它们保持最新状态)用于全屏视图,并使用 QWidget::createWindowContainer 编写了 4 个较小的 QOpenGLWindows,但这也不起作用.
从 QOpenGLWindows 构建的小部件始终位于顶部,即使我使用 lower() 试图让它们落后于全屏 QOpenGLWidget。我也试过在从 QOpenGLWindows 构建的小部件上使用 hide(),但是,这没有效果。
在较低级别执行此操作。保留一个 QGLWidget——实际上不要触及您的 Qt 对象。相反,更改较低级别的渲染,使其对 glViewport
.
进行 4 次调用
每次调用glViewport
后,根据感兴趣的相机更新模型视图和投影以及矩阵,然后绘制3D场景。
这既简单又高效,因为驱动程序只需要处理单个 OpenGL 上下文。您可能需要做一些额外的工作来调整鼠标输入,但我认为这是值得的。
我正在为客户更新应用程序。
他们使用 Qt,目前使用 QGLWidget 来显示通过单击相应的单选按钮选择的 4 个可能的摄像机之一的全屏视图。然后他们使用 OpenGL 在显示的图像上绘图。这很好用,但他们想更新 UI 以包含所有 4 个摄像头的四分割视图。
关于如何实现这一点,我的第一个想法是保留一个 QGLWidget 用于全屏显示,并有 4 个小 QGLWidgets 用于四分屏。从文档中我发现您不能重叠 QGLWidgets 或 QOpenGLWidgets,因为它们没有适当地处理 z 顺序,但这可以通过使用 QOpenGLWindows 和 QWidget::createWindowContainer 来完成。
因此,我编写了一个应用程序,该应用程序使用 QOpenGLWidget(试图使它们保持最新状态)用于全屏视图,并使用 QWidget::createWindowContainer 编写了 4 个较小的 QOpenGLWindows,但这也不起作用.
从 QOpenGLWindows 构建的小部件始终位于顶部,即使我使用 lower() 试图让它们落后于全屏 QOpenGLWidget。我也试过在从 QOpenGLWindows 构建的小部件上使用 hide(),但是,这没有效果。
在较低级别执行此操作。保留一个 QGLWidget——实际上不要触及您的 Qt 对象。相反,更改较低级别的渲染,使其对 glViewport
.
每次调用glViewport
后,根据感兴趣的相机更新模型视图和投影以及矩阵,然后绘制3D场景。
这既简单又高效,因为驱动程序只需要处理单个 OpenGL 上下文。您可能需要做一些额外的工作来调整鼠标输入,但我认为这是值得的。