Fondamenti di Grafica Tridimensionale 2016/2017

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 sulle basi del rendering interattivo e fotorealistico. Una parte significativa del corso ha carattere progettuale e prevede la partecipazione attiva degli studenti allo sviluppo collaborativo di MeshLabJS, un sistema open source per il mesh processing. La parte progettuale e' basata principalmente sulle seguenti tecnologie: C++, Qt, Javascript, WebGL, threejs.

Argomenti trattati nel corso:

Modalita' di esame

L'esame e' costituito da una parte progettuale ed una teorica.
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). Il Compitino si svolgerà mercoledì 11 gennaio ore 1400 aula C1

Orario

Lunedì Martedì Mercoledì Giovedì Venerdì
Aula C1
14-16
Aula L1
14-16

Lezioni e Lucidi

Data Contenuto
21 Set 2016 - Mercoledì Aula C114:00 Introduzione al corso, (PDF)
Data Structures for 3D Meshes (PDF)
23 Set 2016 - Venerdì Aula C116:00 Introduzione alla VCG lib (PDF)
28 Set 2016 - Mercoledì Aula C114:00 Esercitazione VCG Lib
(FGT_common.zip) contiene un folder FGT contenente un file common.pri (file di progetto per qt creator) utilizzato da tutti i prossimi sorgenti distribuiti. Il folder FGT deve essere messo nel folder vcglib/apps della vostra copia github (aggiornata!) del repository.
(FGT_20160928.zip) Contiene invece il codice visto a lezione in cui si contano vertice, edge e facce e boundary loop per verificare la caratteristica di eulero.
30 Set 2016 - Venerdì Aula L114:00 Coordinate Omogenee e Trasformazioni(PDF)
Esercitazione VCG Library
(FGT_20160930.zip) Contiene il codice visto a lezione in cui utilizzando le funzioni di base AddVertices e AddFaces si costruisce un semplice tetraedro.
05 Ott 2016 - Mercoledì Aula C114:00 Esercitazione VCG Library
(FGT_20161005.zip) Contiene il codice visto a lezione in cui si effettua una visita topologica della superficie.
07 Ott 2016 - Venerdì Aula L114:00 Rendering Paradigms (PDF)
12 Ott 2016 - Mercoledì Aula C114:00 Projective Rendering Pipeline (PDF)
Esercitazione VCG Library sulle trasformazioni.
(FGT_20161012.zip) Contiene il codice visto a lezione in cui tramite concatenazioni di trasformazioni e replicazioni si crea un anello di moebius fatto di cubetti.
14 Ott 2016 - Venerdì Aula L114:00 Esercitazione VCG Library
(FGT_20161014.zip) Contiene il codice visto a lezione in cui si cerca di muovere un punto sulla superficie di una mesh lungo la direzione di massima decrescita della z. Per venerdi' prossimo dovreste correggere la parte che proietta in 3D sul piano del triangolo l'intersezione 2D tra la retta di massima decrescita e gli edge del triangolo stesso.
19 Ott 2016 - Mercoledì Aula C114:00 Lighting Models (PDF)
21 Ott 2016 - Venerdì Aula L114:00 Lighting Models (Stessi lucidi lezione precedente)
Esercitazione VCG Library
(FGT_20161021.zip) Contiene il codice visto a lezione dove si continua l'esercizio di muovere un punto sulla superficie di una mesh lungo la direzione di massima decrescita della z.
26 Ott 2016 - Mercoledì Aula C114:00 Esercitazione VCG Library
(FGT_20161026.zip) Contiene il codice visto a lezione dove si continua l'esercizio di muovere un punto sulla superficie di una mesh lungo la direzione di massima decrescita della z
28 Ott 2016 - Venerdì Aula L114:00 Spatial Indexing (PDF)
Esercitazione VCG Library
(FGT_20161028.zip) Kdtree using vgc library example.
9 Nov 2016 - Mercoledì Aula C114:00 Simplification and Refinement (PDF)
11 Nov 2016 - Venerdì Aula L114:00 Introduzione a MeshlabJS
Questa volta nessuno zip. Il codice visto a lezione e' quello sul repository github. In particolare a lezione abbiamo visto come sia possibile aggiungere un semplice filtro che riorienta coerentemente le facce di una mesh. Le modifiche viste a lezione sono quelle che sono state committate sul repository il 11 novembre.
16 Nov 2016 - Mercoledì Aula C114:00 Global Illumination (PDF)
18 Nov 2016 - Venerdì Aula L114:00 MeshLabJS
Come funziona il rendering system di MeshLabJS
23 Nov 2016 - Mercoledì Aula C114:00 Parametrization and Remeshing 1 (Lezione tenuta da Nico Pietroni) (PDF)
25 Nov 2016 - Venerdì Aula L114:00
30 Nov 2016 - Mercoledì Aula C114:00 Parametrization and Remeshing 2 (Lezione tenuta da Nico Pietroni) (PDF)
2 Dic 2016 - Venerdì Aula L114:00 Added Filter for Flip and Relax optimisation to MeshLabJS (see commit on github).
7 Dic 2016 - Mercoledì Aula C114:00 Added another Filter to MeshLabJS, basic hole filling.
9 Dic 2016 - Venerdì Aula L114:00
14 Dic 2016 - Mercoledì Aula C114:00 (FGT_20161214.zip) Contiene il codice visto a lezione dove si costruisce una mesh adattiva che approssima una funzione z=f(x,y) data per mezzo di flip.
16 Dic 2016 - Venerdì Aula L114:00 (FGT_20161216.zip) Versione Finale del codice visto a lezione dove si costruisce una mesh adattiva che approssima una funzione z=f(x,y) data per mezzo di flip, refine e smooth.
11 Gen 2017 - Mercoledì Aula C40 - ISTI - CNR 14:00 Compitino Finale
Alcuni esempi di compitini finali (dagli scorsi anni, esempi indicativi ci potrebbero essere piccole differenze di programma): 1, 2, 3, 4, 5, 6.

VCG Library

Libreria per la gestione di mesh triangolate, costituisce il framework dove abbiamo fatto le esercitazioni, e' distribuita con licenza GPL su github, il sito ufficiale e' http://github.com/cnr-isti-vclab/vcglib/. Le versioni stabili della libreria sono rilasciate sulla pagina https://github.com/cnr-isti-vclab/vcglib/releases
Per avere la versione development della library clone la 'devel' branch della library : git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git
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 a lezione si suppone stiano sotto la dir apps/sample.

Learning VCG Library

Piccola serie di esercizi a difficolta' crescente per prendere dimestichezza con la libreria.

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


Una lista aggiornata di testi di computer graphics ragionevoli la trovate qui . Di seguito un estratto a gusto personale che copre un po' tutti gli aspetti (generale, rendering accurato, interattivo, ecc.).

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. VCG Lib uses a git repository hosted by github. The main project page of the library is http://github.com/cnr-isti-vclab/vcglib/ The stable version of the library are available under the release page https://github.com/cnr-isti-vclab/vcglib/releases To get the development version of library clone the 'devel' branch of the library : git clone -b devel https://github.com/cnr-isti-vclab/vcglib.git, e' distribuita 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.