Il corso (48 ore) tratta concetti, algoritmi, e tecnologie della grafica 3D interattiva, con esempi pratici in OpenGL.
Introduzione. Differenze tra grafica 3D e grafica 3D interattiva. Il ciclo di rendering interattivo. La pipeline per il real-time rendering.
Rappresentazione di geometrie. Mesh di poligoni e loro rappresentazione. Rappresentazione di triangoli e mesh di triangoli. Normali e altri dati associati ai vertici.
Trasformazioni Spazi di coordinate utilizzati in Grafica 3D. Trasformazioni affini: rotazione, scala, traslazione. Trasformazioni in coordinate omogenee.
La telecamera virtuale Rappresentazione di una telecamera virtuale. Camera space, clip space e screen space. Proiezioni ortografiche e prospettiche. Clipping e screen mapping.
Rasterizzazione e interpolazione Algoritmi per la rasterizzazione di punti, linee e poligoni. Interpolazione prospettica di attributi dei vertici. Aliasing e metodi di anti-aliasing screen-based.
Textures Concetto di texture map. Texture space e coordinate di texture. Applicazione di texture. Metodi di anti-aliasing per texture.
Operazioni su frammenti e buffer Operazioni su frammenti: alfa test, blending. Operazioni con buffer: stencil test, depth test.
Programmable Shaders Vertex e fragment shaders. Il linguaggio Glsl.
Shading I colori e la loro rappresentazione nel rendering. Fenomi visuali e loro importanza nello shading. Equazioni di shading e loro implementazione tramite shaders. Frequenza di valutazione: flat shading, Gouraud shading e Phong shading)
Modello di Illuminazione Blinn-Phong e Cook-Torrance rappresentazione di sorgenti di luce e materiali. Equazione di shading di Phong. Termine speculare Blinn/Phong. Termine speculare Cook-Torrance. Implementazione tramite shaders.
Uso di Textures nello shading. Material Mapping, Normal Mapping. Implementazione tramite shaders.
Alcune tecniche di illuminazione globale. Environment Mapping, Shadow Mapping. Implementazione tramite shaders.
Strutture dati spaziali. Bounding volumes, Bounding Volume Hierarchies, Binary Space Partitioning Trees. Algoritmi di culling: Hierarchical View Frustum Culling
Rendering Basato su Immagini. Cenni a sprites, impostors, billboards. Effetti full screen. Implementazione di alcuni algoritmi di image processing tramite shaders: color filters, convoluzioni.
Introduzione alle animazioni. Animazioni tramite keyframing: interpolazione tramite splines. Cenni ad altri tipi di animazioni.
Controllo della telecamera virtuale. Panoramica dei metodi interattivi, assistiti e automatici. Metodi reattivi e dichiarativi. Un esempio di algoritmo dichiarativo per la determinazione della telecamera ottimale a partire da un insieme di requisiti.
OpenGL e GLSL Concetti di base. Struttura di base di un programma con OpenGL e GLUT. Tipi di dati OpenGL e modello degli oggetti. Modello di rendering OpenGL. Gestione di eventi con GLUT. Primitive OpenGL per il disegno di geometrie tramite vertex buffers. Trasformazioni modelview in OpenGL e stack di trasformazioni. Proiezioni e viewport mapping in OpenGL. Applicazione di textures in OpenGL. Il linguaggio GLSL. Uso di shaders GLSL in OpenGL.
Real-Time Rendering, 3rd edition, di T. Akenine-Möller, E. Haines, e N. Hoffman
oppure
Real-Time Rendering, 2nd edition, di T. Akenine-Möller, E. Haines, e N. Hoffman
3D Math Primer for Graphics and Game Development, di F. Dunn e I. Parberry
oppure
Mathematics for 3D Game Programming and Computer Graphics, 2nd edition, di Eric Lengyel
L'esame si compone di una prova scritta (le date degli appelli sono su esse3), due esercitazioni (da consegnare il giorno prima della prova scritta che si intende sostenere) e un orale con discussione della prova scritta e delle esercitazioni.
La prima esercitazione va consegnata via mail entro il 6 maggio 2012. Testo e materiali. Alcuni esempi di scene. Contiene anche qualche file obj di una certa complessità, in modo da verificare il comportamento del vostro programma in situazioni non banali.
La seconda esercitazione va consegnata via mail entro l'appello scritto che intendete sostenere. testo.
La prima esercitazione va consegnata entro il 6 maggio. Il testo dell'esercitazione si trova qui. Attenzione: il testo è stato leggermente modificato in data 15 aprile 2011 per una inesattezza nel testo della seconda parte.
Due esempi di file obj: cube.obj e teapot.obj. Una precisazione: se volete caricare file obj generici, è bene che il vostro parser ignori le parti del file non riconosciute. Ad esempio, il file cube.obj contiene una riga "g cube" che identifica un gruppo, e che il parser dovrebbe ignorare.
Un esempio di file di scena: example.scene. Una precisazione: variazioni minori nella sintassi (ad esempio, non usare le virgolette per delimitare i nomi del file, o rendere facoltative le trasformazioni identiche) vanno bene.
La seconda esercitazione va consegnata entro il 14 giugno. Il testo dell'esercitazione si trova qui. Attenzione: il testo è stato integrato in data 1 giugno 2011 per specificare meglio i punti bonus.