2013-12-11 10 views
9

Mi piacerebbe rendere una scena 3D in diverse finestre. Queste finestre sono compresi nel "sottofinestre" con i propri menu come questo: enter image description hereMultiple OpenGL Viewports con Qt 5

Ogni finestra può essere:

  • ridimensionata;
  • Nascosto;
  • Visualizzato a schermo intero;
  • Spostati in un'altra parte dell'applicazione.

Così possiamo avere qualcosa di simile: enter image description here

credo che sia meglio per incorporare ogni finestra in un Qt widget contenente il mio widget di OpenGL (giusto?). Quindi, , come posso rendere la mia scena 3D in più Qt OpenGL Widget?

+0

Sono curioso, il widget Qt fornisce tutte le opzioni "Visualizza", "Ombreggiatura", "Illuminazione" da solo? Qual è il nome di questo widget? – sonofrage

risposta

4

credo che sia meglio per incorporare ogni finestra in un Qt widget contenente il mio widget di OpenGL (è giusto?). Così come posso rendere la mia scena 3D in diversi Qt OpenGL Widget?

Come descritto nel QGlWidget's detailed description, oltre a sovrascrivere initializeGL e paintGL, è inoltre necessario eseguire l'override del metodo resizeGL. Nel metodo resizeGL, è necessario regolare la porta di visualizzazione e il frustum.

Dopodiché, si tratta solo di creare e posizionare i widget sullo schermo. Possono essere completamente indipendenti l'uno dall'altro ed è possibile impostare il trame in modo diverso per ciascuno.

Poiché si desidera condividere il contesto opengl tra questi widget, dare un'occhiata a OpenGL context sharing. Per farlo, è necessario passare l'oggetto contesto OpenGL come primo parametro al costruttore del QGLWidget.

+1

Grazie per il tuo anser. Se ho 8 QGlWidget, il rendering di una scena 3D, quindi ho bisogno di avviare OpenGL (VAO, VBO, ecc) solo una volta. Come posso quindi "condividere" l'inizializzazione (e il rendering?) Tra questi 8 diversi oggetti? – Korchkidu

+3

@Korchkidu Utilizzando un contesto OpenGL comune. Vedere http://qt-project.org/doc/qt-5.0/qtgui/qopenglcontext.html#context-resource-sharing –

+0

@Korchkidu Inoltre, è necessario creare QGLWidget con oggetto di contesto specifico: http: // qt-project .org/doc/qt-4.8/qglwidget.html # QGLWidget-2 –