Strumenti Utente



indice

Tutorial QCost #1: creiamo un semplice computo metrico estimativo

In questo primo tutorial su QCost vedremo come creare il computo metrico di un piccolo intervento. Non ci concentreremo su tutte le funzionalità offerte dal programma, ma vedremo come arrivare velocemente alla stampa di un semplice computo metrico estimativo.

Un po' di teoria...

I documenti principali da considerare per la valutazione economica di un progetto sono l'elenco prezzi e il computo metrico estimativo. Vediamo come definirli con QCost.

Elenco Prezzi

Semplificando un po' possiamo dire che l'elenco prezzi è una lista delle lavorazioni di cui si compone l'intervento con i relativi costi unitari.

Operativamente in QCost ciascuna voce di prezzo è composta da:

Qt e OpenGL - Le texture tridimensionali

Nel precedente articolo abbiamo cominciato a parlare delle texture OpenGL, analizzando un esempio in cui abbiamo disegnato un cubo rotante con un numero disegnato su ciascuna faccia. Il numero era una texture bidimensionale (sempre la stessa!).

Immagino siate rimasti non poco perplessi nel vedere lo stesso numero su tutte le facce del cubo! Perciò ora ci occuperemo di dare ad ogni faccia un numero diverso. La flessibilità delle API OpenGL ci pemettono di ottenere questo risultato in più modi: il più immediato potrebbe essere la creazione di sei texture. Un altro metodo è descritto nel progetto di esempio Cube OpenGL ES 2.0 disponbile nella documentazione delle Qt, in cui le facce del cubo sono disegnate in successione in un'unica immagine e con le coordinate texture si specifica quale porzione di quest'immagine disegnare su ciascuna faccia.

In questo articolo otterremo lo stesso risultato creando invece un vettore di texture. A tal proposito nelle OpenGL 3 è disponibile uno strumento ad hoc, chiamato texture 2D array. Per evitare problemi di compatibilità, ci serviremo invece di una texture tridimensionale, disponibile anche in versioni precedenti delle API OpenGL: la sostanza è la stessa, cambiano leggermente le funzioni per accedere ai valori delle texture ed i relativi parametri.

Tutorial FreeCAD #5 - Creiamo oggetti personalizzati

Abbiamo visto nel precedente tutorial le potenzialità di personalizzazione offerte dagli script python all'interno di FreeCAD. Tale strumento potrebbe però trovare un limite nella necessità di ripetere tutta la sequenza di comandi python ogni qualvota desideriamo modificare l'oggetto che abbiamo creato.

E' possibile superare questo limite creando oggetti personalizzati le cue dimensioni caratteristiche, analogamente a quanto avviene per gli oggetti già disponibili in FreeCAD, possono essere modificate nella finestra di dialogo delle proprietà.

Impostazione generale

Gli oggetti personalizzati sono delle classi. Per quelli di voi non avvezzi alla programmazione orientata agli oggetti, diciamo che le classi sono dei contenitori di variabili e funzioni. Ovviamente python supporta anche il paradigma di programmazione ad oggetti.

Qt e OpenGL - Le texture e la classe QOpenGLTexture

In questo articolo parleremo di texture. Dopo una breve introduzione su cosa sono le texture nella programmazione openGL, vedremo come implementarle con gli strumenti standard delle OpenGL che con quelli specifici presenti all'interno delle Qt.

Continua così la panoramica sulla programmazione OpenGL e le Qt già cominciata con i precedenti articoli:

Cosa sono le texture?

Partiamo da zero definendo brevemente cosa sono le texture. Se avete avuto precedenti esperienze con la programmazione 3D probabilmente collegherete le texture alle immagini bitmap e sicuramente l'associazione è corretta. Le texture però sono uno strumento che può essere applicato anche anche per definire e caricare immagini sulla GPU . Fondamentalmente le texture sono dei vettori che possiamo usare in generale per caricare sulla GPU vettori da 1 a 3 dimensioni con un numero di elementi praticamente arbitrario (l'unico limite è connesso che le risorse hardware che abbiamo a disposizione).

Qt e OpenGL - Index Buffer Object con la classe QOpenGLBuffer

In questo articolo parleremo degli Index Buffer Object. Come già accaduto nel precedente articolo, prima vedremo come usare questo caratteristica utilizzando direttamente le API OpenGL, e, a seguire, con gli strumenti presenti nelle librerie Qt.

A cosa servono gli Index Buffer Object

Per capire a cosa servano gli index Buffer Object (d'ora in poi IBO) riferiamoci al caso concreto del disegno di un cubo. Utilizzando gli strumenti visti nel precedente articolo, per disegnare le facce che delimitano un cubo con triangoli, dovremmo creare un VBO contenente le coordinate di 36 punti (6 facce * 2 triangoli * 3 punti), ripetendo più volte le coordinate degli otto vertici che geometricamente definiscono il cubo.

L'idea dietro gli IBO è molto semplice:

  • carico un VBO contenente, nel nostro caso, i soli 8 vertici effettivamente necessari
  • disegno le facce del cubo comunicando volta per volta alla GPU i soli indici dei vertici che intendo disegnare.

L'IBO è il buffer nel quale individuo gli indici dei vertici. Trattandosi di indici, tipicamente l'IBO conterrà interi senza segno (GLushort piuttosto che GLuint).

Gli IBO in generale

Vediamo ora all'opera gli IBO utilizzando direttamente le API OpenGL. Prenderò come base i sorgenti di uno dei precedenti articoli.

Qt e OpenGL - Vertex Buffer Object con la classe QOpenGLBuffer

Abbiamo visto nei precedenti articoli come accedere ala funzionalità di OpenGL derivando le classi QWindow e QOpenGLWidget.

Vedremo ora come creare un Vertex Buffer Object con le librerie Qt. Un Vertex Buffer Object (d'ora in poi VBO) è un caratteristica delle OpenGL che permette di caricare sulla memoria della GPU informazioni specifiche per ciascun vertice, rendendole disponibili per le successive fasi di disegno. In questo modo si evitano continui passaggi di dati dalla CPU alla GPU ad ogni ridisegno della scena, ottimizzando l'impiego delle risorse. Le informazioni che possono essere passate spaziano da singoli valori numerici a vettori di qualsiasi dimensione, purché prefissata.

I VBO in generale

Analizziamo quali sono le API OpenGL necessarie per creare i VBO. Per farlo partiremo dal codice del 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

class GLWidget : public QOpenGLWidget, public QOpenGLFunctions

Non è però sufficiente: è necessario lanciare initializeOpenGLFunctions() nel metodo in initializeGL()


indice.txt · Ultima modifica: 2013/07/08 10:00 da mickele

Facebook Twitter Google+ Digg Reddit LinkedIn StumbleUpon Email