Grafica (C.d.S. Magistrale in Informatica) A.A.2017/18
(2^ semestre, 2^ anno)
Esame progetto e orale
CFU 6
Docente Prof. Giulo Casciola
Installare blender: programma OpenSource per modellazione/rendering 3D
nelle distribuzioni Ubuntu cercare il nome-pacchetto:
blender
Installare le seguenti librerie SDL:
SDL 2.0, SDL_ttf e SDL_image per SDL 2.0 (SDL_ttf 2.0 e SDL_image 2.0);
nelle distribuzioni Ubuntu cercare i nomi-pacchetti:
libsdl2-dev
libsdl2-ttf-dev
libsdl2-image-dev
Installare la seguente libreria GLUT:
nelle distribuzioni Ubuntu cercare il nome-pacchetto:
freeglut3-dev
comandi di installazione:
(apt-cache search nome-pacchetto)
(apt-get install nome-pacchetto)
Scopo
Dare i fondamenti della grafica 3D al calcolatore, tra cui i concetti di modellazione poligonale e
resa in tempo reale. Modellazione e rappresentazione grafica di scene 3D mediante opportuni
software.
Contenuto
Sistemi raster-scan, dispositivi di I/O, librerie grafiche, programmazione event-driven. Mesh 3D e loro rappresentazione grafica. Trasformazioni geometriche 2D/3D, trasformazioni di vista, proiezioni prospettica e parallela, trasformazione window-viewport. Pipeline grafica. Algoritmi di real-time rendering, rimozione delle parti nascoste (hidden line e hidden surface), modelli di illuminazione e algoritmi di shading (Z-buffer), texture mapping. Modelli poligonali 3D, curve e superfici in forma parametrica, modellazione geometrica di curve e superfici spline e spline razionali (NURBS), strumenti per la modellazione geometrica. Il corso prevede una attivita' pratica in cui verra' utilizzato il linguaggio di programmazione C/C++ e le librerie grafiche OpenGL/GLSL (JavaScript e libreria WebGL).
Testi Consigliati
- Peter Shirley, Fundamentals of Computer Graphics, AK Peters (2005);
- Samuel R. Buss, 3D Computer Graphics: A mathematical introduction with OpenGL, Cambridge University Press (2003);
- Max K. Agoston, Computer Graphics and Geometric Modeling: Implementation and Algorithms, Springer (2004).
- Max K. Agoston, Computer Graphics and Geometric Modeling: Mathematics, Springer (2005).
Orario delle Lezioni
- Le lezioni inizieranno l' 1 marzo con il seguente orario:
Gi. ore 14.00-18.00 Aula Tonelli (Dip.Matematica)
Ve. ore 15.30-18.30 Aula VII Piano (Dip.Matematica)
- Cambio Aula:
dal 16/3 le lezioni del venerdi' saranno nell'Aula Pincherle
(tranne venerdi' 13/4 che sara' in Aula VII piano).
Lezioni e Argomenti trattati
- Gi.1/03/18, ore 14.00-17:00, Aula Tonelli
, Lezione 1.
Introduzione al corso: grafica 3D Real Time = modellazione + resa,
informazioni generali sugli obiettivi e sul corso dal punto
di vista organizzativo. (vedi lucidi: Introduzione al Corso).
Introduzione ad alcune applicazioni della grafica 3D.
(vedi lucidi: La Grafica e sue Applicazioni).
- Gi.8/03/18, ore 14.00-17.30, Aula Tonelli
, Lezione 2.
Ancora su applicazioni della grafica 3D.
Hardware per un sistema grafico interattivo: architettura
di un display raster scan, Monitor, Frame Buffer, DPU.
Tipi di Frame Buffer, grafica con CPU e RAM e DPU, grafica con GPU;
cenni su GPU e GPU programmabili, cenni su prestazioni delle GPU.
- Ve.9/03/18, ore 15:30-17.30, Aula VII piano
, Lezione 3.
Software per un sistema grafico interattivo: il problema dell'interattivita`,
ciclo di polling, coda degli eventi, paradigma di programmazione ad eventi.
(vedi lucidi: Hardware e Software per Grafica Interattiva)
Cenno ad XWindow ed esempio di XClient: derek (vedi codice derek.tgz)
Introduzione alla libreria SDL 2.0 (vedi lucidi: Simple Directmedia Layer).
Elementi di programmazione SDL: gestione grafica ed eventi.
Messo a disposizione archivio di semplici programmi da provare e modificare (vedi archivio SDL2prg0.tgz).
- Gi.15/03/18, ore 14:00-18.00, Aula Tonelli
, Lezione 4.
Ancora sulla libreria SDL 2.0: gestione testo, gestione immagini, gestione tempo ed esempi
in SDL2prg0.
X Window System: architettura del sistema, X Client, rete,
X Server, X Protocol, Xlib.
SDL ed il disegno di linee: algoritmo di linea incrementale,
algoritmo di linea di Bresenham (funzione GC_draw_line1);
algoritmo di disegno in coordinate floating point (Window e Viewport).
Visionati programmi di esempio in SDL2prg0, assegnati due Esercizi,
proposto di migliorare ed estendere ball2.c.
(vedi lucidi: X Window ed Esempi SDL)
- Ve.16/03/18, ore 15.30-17.30, Aula Pincherle
, Lezione 5.
Trasformazioni geometriche; richiami, trasformazioni elementari:
traslazione, scala, rotazione. Spazio affine: punti, vettori, combinazioni affini,
sistema di riferimento, trasformazioni affini, composizione di
trasformazioni mediante prodotto di matrici; trasformazioni elementari 3D in coord. omogenee:
traslazione, scala, rotazione rispetto agli assi coordinati.
Composizione di trasformazioni, trasformazioni inverse.
Trasformazioni composte come rotazione e scala rispetto ad un punto.
Cambio di sistema di riferimento; due procedure alternative.
(vedi lucidi: Trasformazioni Geometriche)
Definizione dei parametri di vista.
- Gi.22/03/18, ore 14:00-18.00, Aula Tonelli
, Lezione 6.
Sistema di coordinate cartesiano e sferico.
Trasformazione di vista; trasformazioni prospettiche e parallele;
determinazione formule per il viewing 3D. Trasformazione di vista con View_Up vector;
tronco di piramide di vista (frustum), window e necessita' di clipping 3D.
Visionato programma di esempio (persp_cube_sdl) che implementa la trasformazione di vista.
Assegnato un Esercizio. (vedi lucidi: Trasformazioni di Vista)
Introduzione agli algoritmi di real-time rendering: hidden-line e hidden-surface.
Algoritmo Z-buffer per Hidden-Surface Removal di mesh
poligonali; descrizione dell'algoritmo in termini di pseudocodice e significato
del buffer Z (vedi lucidi: Algoritmi di Real-Time Rendering).
Introduzione alla coordinate Baricentriche;
Esempi di utilizzo delle coordinate baricentriche: rasterizzazione di triangoli e interpolazione colore.
Visionati e provati codici raster_draw_color e persp_cube_color_sdl.
Algoritmo di scan conversion per poligoni generici;
(vedi lucidi: Coordinate Baricentriche e Algoritmi di Rasterizzazione).
- Ve.23/03/18, ore 15.30-18.30, Aula Pincherle
, Lezione 7.
Rasterizzazione: specializzazione per triangoli;
estensione per scan conversion di triangoli con componenti colore.
Relazione fra le coordinate baricentriche di un segmento 3D (triangolo) e
del suo proiettato e "profondita' di un pixel". Trasformazione prospettica con profondita':
verifica che la trasformazione manda rette in rette.
Verifica che la trasformazione manda piani in piani;
trasformazione come deformazione dello spazio; parametri alpha e beta; profondita' Z di un pixel.
Rivisitata pipeline di vista per Z-buffer.
Estensione rasterizzazione con altri parametri quali
profondita' Z, coordinate colori, componenti normali, ecc..
Proiezione prospettica con profondita' e gestione coordinate texture.
Cenni alla elaborazione di immagini per la rasterizzazione con texture.
Esaminato codice persp_cube_texture_sdl.c con gestione corretta o meno delle coordinate texture.
Proposto esercizio da realizzare modificando il codice persp_cube_texture_sdl.c
(vedi lucidi: Proiezione Prospettica con Profondita' e ZBuffer).
- Gi.05/04/18, ore 14:00-18.00, Non c'e' Lezione
- Ve.06/04/18, ore 15:30-17.30, Aula Pincherle
, Lezione 8.
Seminario Dr.Andrea Benetti su: Computer grafica nei film e videogiochi (in realta' virtuale) Vedi slide:
Computer-animated movies &(Virtual Reality) games (file.pdf 163Mb)
- Gi.12/04/18, ore 14:00-18.00, Aula Tonelli
, Lezione 9.
Introduzione alle librerie OpenGL: GL e GLU,
macchina a stati finiti, pipeline OpenGL, modalita' di rendering, codici di esempio
(vedi lucidi: Libreria Grafica OpenGL: Introduzione).
Programmazione Opengl con GLUT.
(vedi lucidi: Libreria Grafica OpenGL + GLUT).
Esaminati alcuni codici di esempio dell'archivio glut_OpenGL_ffp.tgz.
Programmazione Opengl con SDL2.
(vedi lucidi: Libreria Grafica OpenGL + SDL2).
Esaminati alcuni codici di esempio dell'archivio sdl2_OpenGL_ffp.tgz.
Ripresi e discussi gli esercizi assegnati il 15/3/18.
Ripresi gli esercizi assegnati il 22/3/18 e il 23/3/18.
- Ve.13/04/18, ore 15:30-18.30, Aula VII piano
, Lezione 10.
Pipeline delle trasformazioni in OpenGL: trasformazioni di modellazione,
trasformazioni di vista e di proiezione; programmi esempio e tutorial.
Depth Buffer per la rappresentazione con rimozione parti nascoste.
(vedi lucidi: Libreria Grafica OpenGL: Trasformazioni).
Clipping 2D di linee: algoritmo di Cohen-Sutherland.
Estensione dell'algoritmo di Clipping 2D di linee
al caso 3D (vedi lucidi: Clipping di punti e linee).
Clipping 2D di poligoni: algoritmo di Sutherland-Hodgman; estensione al caso 3D
(vedi lucidi: Clipping di Poligoni).
- Gi.19/04/18, ore 14:00-18.00, Aula Tonelli
, Lezione 11.
Introduzione al modello di illuminazione di Phong:
illuminazione ambiente, riflessione diffusa e speculare;
equazione di lighting (parametri legati al materiale e parametri legati alla luce),
posizione osservatore e geometria della
scena (normali, angoli di incidenza, angoli di riflessione).
Tecniche di shading: Flat-shading, Gouraud-shading e Phong-shading;
determinazione del colore da assegnare ad ogni pixel dell'immagine.
Interpolazione colore e interpolazione delle normali (vedi lucidi: Modello di illuminazione di Phong).
Illuminazione in OpenGL (luci e materiali); shading; tutorials e programmi
(vedi lucidi: Libreria Grafica OpenGL: Illuminazione).
Rappresentazione B-Rep (Boundary Representation) di oggetti 3D;
Introduzione alle mesh poligonali 3D;
mesh 3D: formati .obj (wavefront) e OFF; conversione formati e convertitori.
Elementi di una mesh, strutture dati, editing di mesh. Repository di mesh
(vedi lucidi: Mesh 3D poligonali).
- Ve.20/04/18, ore 15:30-17.30, Aula Pincherle
, Lezione 12.
Demo di utilizzo di Blender per editing di Mesh 3D
(vedi lucidi: Blender: Introduzione al Mesh Editing).
Esempio di progettazione di un codice di grafica 3D Real-Time: passo 0 (vedi archivio
progetto_car.tgz), (vedi lucidi: Progetto Car (OpenGL + SDL.
- Gi.26/04/18, ore 14:00-18.00, Aula Tonelli
, Lezione 13.
ProgettoCAR passi 1-3: motore fisico, caricamento e rendering di mesh in formato .obj,
illuminazione scena e gestione luci.
Texture mapping 2D; magnification, minification (mip-mapping); two-part mapping,
environment mapping; solid texture o 3D texture, texture procedurali, bump-mapping.
(Vedi Lucidi: Texture nella Computer Graphics).
Texture in OpenGL: texture object dalla definizione all'applicazione.
(Vedi Lucidi: Libreria Grafica OpenGL: Texture).
- Ve.27/04/18, ore 15:30-17.30, Aula Pincherle
, Lezione 14.
Shadowing: ombre su piani (proiezione), Shadow Buffer per ombre in un
algoritmo Z-Buffer. (vedi lucidi: Shadowing).
ProgettoCAR passo 4: gestione joystick, applicazione e gestione texture e ombre.
- Gi.3/05/18, ore 14:00-18.00, Aula Tonelli
, Lezione 15.
Tecniche di rendering in OpenGL (vedi lucidi: Rendering avanzato in OpenGL e glut).
Schede grafiche programmabili, linguaggio GLSL, esempi. (vedi lucidi: Shaders).
- Ve.4/05/18, ore 15:30-17.30, Aula Pincherle
, Lezione 16.
Curve nella computer graphics: curve 2D e 3D in forma parametrica, curve di Bezier.
Curve spline/nurbs; Esempi e demo con il sistema di modellazione blender e una Web-App.
(vedi lucidi: Curve nella Computer Graphics).
Fine delle Lezioni.
Progetto d'esame
Download Lucidi
Download Documenti
Download Software
Libri
Siti
Chi segue il Corso
Vedi:
modalita' d'esame
Torna alla
home page di Giulio Casciola