2013-12-11 65 views
9

我想将3D场景渲染到不同的视口中。那些视口都包含在“子窗口”用自己的菜单是这样的: enter image description here使用Qt 5实现多个OpenGL视口

每个视口可以是:

  • 调整大小;
  • 隐藏;
  • 全屏显示;
  • 移动到应用程序的另一部分。

因此,我们可以有这样的事: enter image description here

我认为最好是每个视口嵌入到Qt物件包含我的OpenGL窗口小部件(是吗?)。所以如何将我的3D场景渲染成几个Qt OpenGL Widgets?

+0

我很好奇,Qt窗口小部件本身是否提供所有“查看”,“底纹”,“照明”选项?这个小部件的名称是什么? – sonofrage

回答

4

我认为最好是每个视口嵌入到Qt物件包含我的OpenGL窗口小部件(是吗?)。所以,我怎么可以使我的3D场景分为多个Qt的OpenGL的小工具?

QGlWidget's detailed description中所述,除了覆盖initializeGL和paintGL之外,还需要覆盖resizeGL方法。在resizeGL方法中,您需要调整视图端口和平截头体。

之后,它只是创建和放置在屏幕上的小部件的问题。它们可以完全相互独立,并且可以为每个设置不同的平截头体。

由于您想在这些小部件之间共享opengl上下文,请查看OpenGL context sharing。要真正做到这一点,您需要将OpenGL上下文对象作为第一个参数传递给QGLWidget的构造函数。

+1

谢谢你的泽。如果我有8个QGlWidget,渲染一个3D场景,那么我只需要初始化OpenGL(VAOs,VBOs等)一次。那么我怎样才能在这8个不同的对象之间“分享”初始化(和渲染?)? – Korchkidu

+3

@Korchkidu通过使用通用的OpenGL上下文。请参阅http://qt-project.org/doc/qt-5.0/qtgui/qopenglcontext.html#context-resource-sharing –

+0

@Korchkidu另外,您需要创建具有特定上下文对象的QGLWidget:http:// qt-project .org/doc/qt-4.8/qglwidget.html#QGLWidget-2 –