Strumenti Utente



tutorial_qt:opengl_02_vbo_qopenglbuffer

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
tutorial_qt:opengl_02_vbo_qopenglbuffer [2015/01/26 22:23]
mickele
tutorial_qt:opengl_02_vbo_qopenglbuffer [2015/05/05 14:42] (versione attuale)
mickele
Linea 1: Linea 1:
-====== Qt e OpenGL: i Vertex Buffer Object la classe QOpenGLBuffer ======+====== Qt e OpenGL Vertex Buffer Object con la classe QOpenGLBuffer ======
  
 Abbiamo visto nei precedenti articoli come accedere ala funzionalità di OpenGL derivando le classi [[tutorial_qt:opengl_01|QWindow]] e [[tutorial_qt:opengl_01bis|QOpenGLWidget]]. Abbiamo visto nei precedenti articoli come accedere ala funzionalità di OpenGL derivando le classi [[tutorial_qt:opengl_01|QWindow]] e [[tutorial_qt:opengl_01bis|QOpenGLWidget]].
Linea 7: Linea 7:
 ===== I VBO in generale ===== ===== I VBO in generale =====
  
-Vediamo in generale quali sono le API OpenGL necessarie per creare i VBO. Per farlo partiremo dal codice del [[tutorial_qt:opengl_01bis|precedente articolo]].+Analizziamo quali sono le API OpenGL necessarie per creare i VBO. Per farlo partiremo dal codice del [[tutorial_qt:opengl_01bis|precedente articolo]].
  
 Un metodo molto semplice per accedere direttamente alle API OpenGL è derivare dalla classe QOpenGLFunctions. Pertanto la nostra classe GLWidget deriverà sia da QOpenGLWidget che da QOpenGLFunctions Un metodo molto semplice per accedere direttamente alle API OpenGL è derivare dalla classe QOpenGLFunctions. Pertanto la nostra classe GLWidget deriverà sia da QOpenGLWidget che da QOpenGLFunctions
Linea 94: Linea 94:
 Qualora siate interessati ad approfondire i comandi appena visti vi rimando al tutorial di Wikibooks disponibile all'indirizzo [[http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_02|en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_02]]. Qualora siate interessati ad approfondire i comandi appena visti vi rimando al tutorial di Wikibooks disponibile all'indirizzo [[http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_02|en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_02]].
  
-===== I VBO alla Qt-way: la classe QOpenGLBuffer =====+===== I VBO secondo la Qt-way: la classe QOpenGLBuffer =====
  
 Adesso analizziamo l'utilizzo dei VBO con le librerie Qt. Ci serviremo della classe [[http://doc.qt.io/qt-5/qopenglbuffer.html|QOpenGLBuffer]]. Adesso analizziamo l'utilizzo dei VBO con le librerie Qt. Ci serviremo della classe [[http://doc.qt.io/qt-5/qopenglbuffer.html|QOpenGLBuffer]].
  
-Il costruttore della classe richiede che si definisca il tipo di QOpenGLBuffer che si intende creare. Per il disegno vettoriale sono due le tipologie di QOpenGLBuffer che ci interessano: +Il costruttore della classe richiede che si definisca il tipo di QOpenGLBuffer che si intende creare. Per il disegno interattivo sono due le tipologie di QOpenGLBuffer che ci interessano: 
-  * QOpenGLBuffer::VertexBuffer +  * QOpenGLBuffer::VertexBuffer, per creare i VBO; è l'opzione di default ed è quella che utilizzeremo tra breve; 
-  * QOpenGLBuffer::IndexBuffer+  * QOpenGLBuffer::IndexBuffer, per creare gli Indexed Buffer Object (ne vedremo l'impiego in un prossimo articolo).
  
-Useremo QOpenGLBuffer::VertexBuffer per caricare dati in virgola mobile (valori numerici, coordinate, vettori etc) associati ai vertici. QOpenGLBuffer::IndexBuffer ci serve invece per gli indici, ne vedremo l'impiego in un prossimo articolo. +Anche in questo caso riprendiamo il codice del [[tutorial_qt:opengl_01bis|precedente articolo]] introducendo come attributi privati due puntatori alla classe QOpenGLBuffer
- +
-Anche in questo caso riprendiamo il codice del [[tutorial_qt:opengl_01bis|precedente articolo]], questa volta gli attributi privati sono delle istanze della classe QOpenGLBuffer+
  
       QOpenGLBuffer * m_vertexVBO;       QOpenGLBuffer * m_vertexVBO;
       QOpenGLBuffer * m_colorVBO;       QOpenGLBuffer * m_colorVBO;
  
-Nel metodo initializeGL() creeremo l'oggetto QOpenGLBuffer+Useremo il primo per le coordinate dei vertici, il secondo per i relativi colori. 
 + 
 +Nel metodo initializeGL() creiamo l'istanza della classe OpenGLBuffer
  
     m_vertexVBO = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);     m_vertexVBO = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
Linea 117: Linea 117:
     m_vertexVBO->create();     m_vertexVBO->create();
  
-Col metodo setUsagePattern possiamo definire la tipologia di dati che stiamo trasmettendo, ad esempio se si tratti di dati costanti o che cambieranno, di modo da ottimizzare l'impiego delle risorse di sistema. Nel nostro caso abbiamo a che fare con valoriuseremo perciò+Col metodo setUsagePattern definiamo quante volte i dati in questione verranno letti e reimpostati nel coso del prgramma, di modo da ottimizzare l'impiego delle risorse di sistema. Nel nostro caso abbiamo a che fare con valori che verranno impostati una volta ma letti molte volte; useremo perciò
  
     m_vertexVBO->setUsagePattern( QOpenGLBuffer::StaticDraw );     m_vertexVBO->setUsagePattern( QOpenGLBuffer::StaticDraw );
Linea 164: Linea 164:
     glDrawArrays(GL_TRIANGLES, 0, 3);     glDrawArrays(GL_TRIANGLES, 0, 3);
  
 +Al link [[http://ingegnerialibera.altervista.org/blog-file/opengltut02-02.zip|ingegnerialibera.altervista.org/blog-file/opengltut02-02.zip]] troverete il codice finale con tutte le modifiche fin qui viste.
  
-Al link [[http://ingegnerialibera.altervista.org/blog-file/opengltut02-02.zip|ingegnerialibera.altervista.org/blog-file/opengltut02-02.zip]] troverete il codice funzoinante con tutte le modifiche fin qui viste. +Se confrontiamo i due diversi approcci (quello generale con l'impiego delle API OpenGL e quello specifico delle librerie Qt) notiamo che il principale vantaggio della classe QOpenGLBuffer non sia tanto nella riduzione del codice, quanto nella sua maggior leggibilità.
- +
-Se confrontiamo i due diversi approcci (quello generale con l'impiego diretto delle API OpenGL e quello specifico delle librerie Qt) notiamo che il principale vantaggio della classe QOpenGLBuffer non sia tanto nella riduzione del codice, quanto nella sua maggior leggibilità.+
  
 ===== Facciamo girare il triangolo! ===== ===== Facciamo girare il triangolo! =====
Linea 201: Linea 200:
 Nel codice disponibile all'indirizzo [[http://ingegnerialibera.altervista.org/blog-file/opengltut02-03.zip|ingegnerialibera.altervista.org/blog-file/opengltut02-03.zip]] troverete che la rotazione si interrompe o riprende al click del mouse sulla finestra. Lascio a voi l'analisi di questa piccola variante sul tema. Nel codice disponibile all'indirizzo [[http://ingegnerialibera.altervista.org/blog-file/opengltut02-03.zip|ingegnerialibera.altervista.org/blog-file/opengltut02-03.zip]] troverete che la rotazione si interrompe o riprende al click del mouse sulla finestra. Lascio a voi l'analisi di questa piccola variante sul tema.
  
-===== Post correlati =====+===== Potrebbero interessarti anche... =====
  
-  * [[tutorial_qt:opengl_01|Qt e Opengl: Introduzione]] +Un elenco degli altri articoli disponibili sull'argomento
-  * [[tutorial_qt:opengl_01bis|Qt e Opengl: Intro alla classe QOpenGLWidget]]+<blog related> 
 +</blog>
  

tutorial_qt/opengl_02_vbo_qopenglbuffer.1422307418.txt.gz · Ultima modifica: 2015/01/26 22:23 da mickele

Facebook Twitter Google+ Digg Reddit LinkedIn StumbleUpon Email