Fondamenti di Grafica Tridimensionale 2014/2015

Programma

Il corso presenta un'introduzione alle principali tematiche della Grafica Tridimensionale focalizzando sugli aspetti teorici e pratici della modellazione basata su mesh triangolari e del rendering. Una parte significativa del corso ha carattere progettuale e prevede la partecipazione attiva degli studenti allo sviluppo collaborativo di MeshLab, un sistema open source per il mesh processing. La parte progettuale e' basata principalmnente sulle seguenti tecnologie: C++, OpenGL e QT.
Si sottolinea che MeshLab, il tool al cui sviluppo gli studenti collaboreranno nella parte progettuale, non e' un progetto puramente didattico, ma e' un sistema vero e complesso; MeshLab e' correntemente usato da migliaia di utenti in tutto il mondo, per cui si richiede coinvolgimento e motivazione...
Argomenti trattati nel corso:

Modalita' di esame

L'esame e' costituito da una parte progettuale ed una teorica.
Il progetto e' generalmente costituito da un plugin di MeshLab e costituisce la parte + significativa dell'esame. I possibli progetti di plugins li trovate nella wiki di meshlab;
La parte teorica che riguarda gli argomenti di grafica trattati durante il corso, puo' essere sostenuta o con un compitino, o con un orale al momento della consegna della parte progettuale.
La parte progettuale vale 20 trentesimi, mentre la parte teorica vale 10 trentesimi. Voto finale = Progetto + max (Orale, Compitino)

Orario

Lunedì Martedì Mercoledì Giovedì Venerdì
Aula C1
14-16
Aula A1
09-11

Lezioni e Lucidi

Data Contenuto
26 Set 2014 - Venerdì Aula A109:00 Introduzione al Corso (PDF)
Data Structures for 3D Meshes (PDF)
01 Ott 2014 - Mercoledì Aula C114:00 Data Structures for 3D Meshes (PDF)
03 Ott 2014 - Venerdì Aula A109:00 Introduzione alla VCG lib (PDF)
08 Ott 2014 - Mercoledì Aula C114:00 Trasformazioni Geometriche (PDF)
10 Ott 2014 - Venerdì Aula A109:00 Introduzione alla VCG lib (ZIP con i sorgenti)
15 Ott 2014 - Mercoledì Aula C114:00 La pipeline raster di rendering (PDF)
17 Ott 2014 - Venerdì Aula A109:00 Lezione Annullata causa sciopero personale non docente
22 Ott 2014 - Mercoledì Aula C114:00 Introduzione alla VCG lib Seconda parte (ZIP con i sorgenti)
Il codice va completato. Rispetto alla versione vista a lezione ho cambiato la strategia con cui si creano le facce. Per semplicita' vi suggerisco di usare la versione della AddFace() che prende tre Point3f in ingresso e si occupa di creare anche i vertici. In questo modo si creano vertici duplicati ma e' semplice rimuoverli in fondo (vi ho fatto vedere come). Buon lavoro.
24 Ott 2014 - Venerdì Aula A109:00 Introduzione alla VCG lib Terza parte
La versione del codice presentato mercoledì 22 e completato secondo quanto indicato lo trovate qui: (ZIP con i sorgenti)
Il secondo esempio mostrato a lezione lo trovate invece qui: (ZIP con i sorgenti)

Il compitino da svolgere per venerdì 31 ottobre e' descritto qui.
La modalità di consegna e tramite email; mi aspetto uno zip del di un folder chiamato FGT_1_XXXX (dove XXXX va sostituito con il vostro cognome) contenente solo lo stretto necessario cioè il .cpp e il .pro per qtcreator. Il .pro deve essere scritto per essere scompattato nel folder apps/sample della vcglib
29 Ott 2014 - Mercoledì Aula C114:00 Lighting and Shading (PDF)
31 Ott 2014 - Venerdì Aula A109:00 Introduzione alla VCG lib Terza parte
Il codice mostrato a lezione (quello che generava un labirinto sulla superficie di una mesh) lo trovate qui: (ZIP con i sorgenti)
Vi ricordo che come esercizio era rimasta da aggiungere la parte che genera le pareti verticali del labirinto.
05 Nov 2014 - Mercoledì Aula C114:00 Sospensione della didattica per mid-term test
07 Nov 2014 - Venerdì Aula A109:00 Sospensione della didattica per mid-term test
12 Nov 2014 - Mercoledì Aula C114:00 Lighting and Shading (stesso pdf)
14 Nov 2014 - Venerdì Aula A109:00 Esercitazioni Web GL; (PDF)
Il codice mostrato a lezione lo trovate qui: (ZIP con i sorgenti html)
19 Nov 2014 - Mercoledì Aula C114:00 Lezione Tenuta da Marco Di Benedetto
Il materiale presentato lo trovate qui.
21 Nov 2014 - Venerdì Aula A109:00 Lezione Tenuta da Francesco Banterle
Global Illumination (PDF)
26 Nov 2014 - Mercoledì Aula L09:00 Lezione Recupero - Spatial Indexing (PDF)
26 Nov 2014 - Mercoledì Aula C114:00 Spatial Indexing (seconda parte)
Il codice mostrato a lezione (quello che calcolava la distanza media tra i campioni di una point cloud) lo trovate qui: (ZIP con i sorgenti)
28 Nov 2014 - Venerdì Aula A109:00 Surface Simplification and refinement (PDF)
3 Dic 2014 - Mercoledì Aula C114:00 Lezione Tenuta da Marco Di Benedetto
5 Dic 2014 - Venerdì Aula A109:00 Lezione Tenuta da Francesco Banterle
Image Based Lighting (PDF)
10 Dic 2014 - Mercoledì Aula L09:00 Lezione Recupero - Javascript e Emscripten
10 Dic 2014 - Mercoledì Aula C114:00 Javascript e Emscripten
12 Dic 2014 - Venerdì CNR
Aula A37 (vicino auditorium)
09:00 Javascript e Emscripten
Il codice completato a partire da quello mostrato a lezione lo trovate qui: (ZIP con i sorgenti e demo live)A

Il compitino da svolgere per lunedì 22 dicembre e' descritto qui.
La modalità di consegna e tramite email; mi aspetto uno zip del di un folder chiamato FGT_1_XXXX (dove XXXX va sostituito con il vostro cognome) contenente solo lo stretto necessario cioè il .cpp e il .pro per qtcreator. Il .pro deve essere scritto per essere scompattato nel folder apps/sample della vcglib

Compitino

Primo compitino

Testo: PDF
Risultati Primo Progettino

Secondo compitino

Testo: PDF
Risultati Secondo Progettino

Testi e materiale didattico

Durante il corso verranno distributi elettronicamente i lucidi presentati a lezione. Per un trattamento un po' piu' ad alto livello ed ordinato, buona parte degli argomenti teorici (trasformazioni, lighting e shading, texturing, la pipeline di rendering e un po' di teoria del colore li trovate nel seguente testo:

Cover of the book Introduction to Computer Graphics: a Practical Learning Approach
F. Ganovelli, M.Corsini, S. Pattanaik and M. Di Benedetto
CRC Press
ISBN:978-1439852798
Prezzo: 65 euro

Per quanto riguarda invece la parte progettuale, che richiede una ottima conoscenza del C++ ed una ragionevole dimestichezza con QT, esiste moltissimo materiale disponibile in rete. Segnalo solo un paio di link:

VCG Library

Libreria per la gestione di mesh triangolate, costituisce il framework dove abbiamo fatto le esercitazioni, e' distribuita con licenza GPL, il sito ufficiale e' vcg.sf.net. Non ne vengono rilasciate release donwloadabili semplicemente ma dovete scaricarla in SVN anonimo; Qualche hint tecnico su come fare checkout della libreria con tortoise sotto win lo trovate nelle pagine della documentazione del meshlab, qui. Per compilare gli esempi (quelli sotto apps/sample) non ci sono makefile o soluzioni .net gia' pronte ma solo i *.pro a partire dai quali usando qmake (il tool di qt per la creazione automatica di makefiles) potete generarli. Gli esempi distribuiti si suppone stiano sotto la dir apps/sample.

MeshLab

Sistema open source per la visualizzazione e il processing di mesh lo trovate sorgenti e compilato su http://meshlab.sourceforge.net . Per la compilazione di MeshLab fate riferimento alla pagina Compiling della wiki di meshlab; Parte dell'esame consiste nella realizzazione di plugins per il meshlab, i possibili progetti di plugins li trovate alla pagina projects della documentazione del MeshLab.