2015-06-30 14 views
6

Voglio usare Qt 5.4 per creare una finestra e renderizzare con normali funzioni OpenGL alcune cose in quella finestra. Negli ultimi giorni ho letto molto sulle classi Qt e su come inizializzare OpenGL e così via. Penso che le classi principali con cui ho a che fare siano QOpenGLWindow o QOpenGLWidget, ma ci sono anche QSurface e altre classi. Ora sono molto insicuro su cosa fare dopo e su quale classe dovrei usare per usare le normali funzioni OpenGL, più tardi. Qualcuno può spiegare in modo più chiaro a me cosa devo fare per impostare una GUI Qt in cui posso usare OpenGL normale?Come utilizzare OpenGL nativo con Qt 5.4?

Alcune altre domande da parte mia sono:

  • A quel punto non Qt creare un contesto OpenGL pianura? Devo usare QOpenGLContext?
  • Qual è esattamente la differenza tra una QSurface e una QOpenGLWindow? Nell'esempio QOpenGLWindow vengono utilizzate entrambe le classi.
  • È possibile utilizzare glew oltre a questa roba qt? Qui ci sono alcune domande su, che si occupano di configurare glew con qt, ma penso che non ho capito il vero motivo per cui è necessario glew.

Modifica: ho discusso questa domanda con un collega e la nostra unica conclusione era utilizzare il rendering offscreen. Qualcuno conosce un'altra soluzione?

+0

Avete visto [OpenGL Window Exemple] (http://doc.qt.io/qt-5/qtgui-openglwindow-example.html) (anche se non usa la classe 'QOpenGLWindow')? ['QSurface'] (http://doc.qt.io/qt-5/qsurface.html) è una pura classe di base virtuale di' QWindow' e anche di 'QOpenGLWindow'. Apparentemente 'QOpenGLWindow' funziona come' QOpenGLWidget' e 'QOpenGLWidget' [ha una documentazione più completa] (http://doc.qt.io/qt-5/qopenglwidget.html#details). – Leiaz

+0

Esiste anche un esempio QOpenGLWindow fornito con Qt. – peppe

risposta

1

A che punto Qt crea un semplice contesto OpenGL? Devo usare QOpenGLContext?

O dove è documentato (per esempio, la creazione di un QOpenGLWidget o un QOpenGLWindow creerà automaticamente un contesto), oppure si può creare un contesto manualmente in qualsiasi momento con la creazione di un oggetto QOpenGLContext.

Qual è esattamente la differenza tra una QSurface e una QOpenGLWindow? Nell'esempio QOpenGLWindow vengono utilizzate entrambe le classi.

A QSurface è una classe base che rappresenta una "superficie disegnabile" (su schermo o fuori schermo). QWindow è la sua implementazione su schermo (che rappresenta una finestra di livello superiore), quindi eredita da QSurface. È possibile disegnare su un QWindow utilizzando OpenGL o utilizzando un rasterizzatore basato su CPU.

Infine, QOpenGLWindow è una sottoclasse QWindow che offre alcune funzionalità e praticità, creando automaticamente e gestire un contesto OpenGL (via QOpenGLContext), avente una strategia parziale aggiornamento facoltativo (attraverso l'utilizzo di un FBO), etc.

È possibile utilizzare glew oltre a questa roba qt? Qui ci sono alcune domande su, che si occupano di configurare glew con qt, ma penso che non ho capito il vero motivo per cui è necessario glew.

Qt non è a modo vostro. E non cambia in alcun modo il tuo utilizzo di OpenGL. Basta usare Qt per creare una finestra e un contesto (in modo totalmente multipiattaforma), quindi sei libero di usare GLEW (per risolvere i puntatori, le estensioni, ecc. Delle funzioni OpenGL) o qualsiasi astrazione OpenGL di terze parti.

+0

eccetto che QT È IN MIO MODO perché non posso rendere corrente OpenGLContext creato manualmente su QWidgets, solo QSurfaces, se voglio un OpenGLContext corrente in un QWIdget, devo risolvere per usare solo il contesto gestito QT che è garantito essere corrente in initializeGL(), paintGL() e resizeGL() – ComradeJoecool

+0

A QWidget non è una superficie OpenGL, quindi "rendere corrente un contesto su di esso" non ha senso. Hai bisogno di una superficie reale per fare quello che vuoi - ad es. usando una QWindow semplice e avvolgendola in un widget tramite 'QWidget :: createWindowContainer'. Non è "essere sulla tua strada", questo è il gioco delle regole del gioco (che tra l'altro sono dettate da OpenGL, non da Qt). – peppe

+0

ok, quindi avrei dovuto dire che non è QWidget, ma piuttosto QOpenGlWidget, posso usare OpenGL su di esso, ma solo se lo faccio in modo QT, questo è "a modo mio" – ComradeJoecool

Problemi correlati