Grafica (C.d.S. Magistrale in Informatica) A.A.2015/16
(2^ semestre, 2^ anno)
Esame progetto e orale
CFU 6
Docente Prof. Giulo Casciola
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, Xwindow e librerie grafiche, programmazione X.
Trasformazioni geometriche 3D, trasformazioni di vista, proiezioni
prospettica e parallela, rappresentazione grafica di mesh 3D,
algoritmi di rendering con rimozione delle parti nascoste (hidden line e
hidden surface), modelli di illuminazione e algoritmi di shading
(Z-buffer). Introduzione alla libreria grafica OpenGL.
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).
Iscrizione al Corso:
file txt da rispedire per e-mail al docente.
Orario delle Lezioni
- Le lezioni inizieranno il 22 febbraio con il seguente orario:
Lu. ore 08.50-10.30 Aula Ercolani 1 (Ex Scuole Ercolani)
Gi. ore 16.30-18.30 Aula Cremona (Dip.Matematica)
Ve. ore 14.15-16.00 Aula M1 (Dip.Mineralogia)
Lezioni e Argomenti trattati
- Lu.22/02/16, ore 08.30-10.30, Aula E1
, 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).
- Gi.25/02/16, ore 16.30-18.30, Aula Cremona
, Lezione 2.
Introduzione ad alcune applicazioni della grafica 3D.
(vedi lucidi: La Grafica e le sue Applicazioni).
- Ve.26/02/16, ore 14:15-18.00, Aula M1
, Lezione 3.
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.
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 la Grafica)
- Lu.29/02/16, ore 8:50-10.30, Aula E1
, Lezione 4.
Sistema X Window: architettura del sistema, X Client, rete,
X Server, X Protocol, Xlib, Window Manager, display e screen,
connessione X Client e X Server; politica di bufferizzazione
e svuotamento buffer.
Risorse, proprieta' e atomi, caratteristiche delle window.
Gerarchia delle window, mapping e visibility, disegno e graphics
context, eventi.
Esempio di XClient: derek. (vedi lucidi: XWindow System e codice esempio derek.tgz)
- Gi.3/03/16, ore 16.30-18.30, Aula Cremona
, Lezione 5.
Introduzione alla libreria SDL 2.0 (vedi lucidi: Simple Directmedia Layer).
Elementi di programmazione SDL: gestione grafica, eventi, testo, immagini, tempo.
Messo a disposizione archivio di semplici programmi da provare e modificare.
Visionato un semplice codice per disegno di una scena con gestione del tempo.
- Ve.4/03/16, ore 14:00-16.00, Aula M1
, Lezione 6.
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; assegnati due Esercizi.
- Gi.10/03/16, ore 16.30-18.30, Aula Cremona
, Lezione 7.
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.
- Ve.11/03/16, ore 14:00-16.00, Aula M1
, Lezione 8.
Cambio di sistema di riferimento; due procedure alternative.
Definizione dei parametri di vista. 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;
Visionato programma di esempio (persp_cube_sdl) che implementa la trasformazione di vista
visualizzando un cubo; assegnato un Esercizio.
(vedi lucidi: Trasformazioni di Vista)
- Gi.17/03/16, ore 16.30-18.30, Aula Cremona
, Lezione 9.
Ancora su Trasformazioni di Vista: tronco di piramide di vista (frustum) e necessita' di clipping 3D.
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: Real-Time Rendering).
Introduzione alla coordinate Baricentriche;
- Ve.18/03/16, ore 14:00-16.00, Aula M1
, Lezione 10.
Esempi di utilizzo delle coordinate baricentriche: rasterizzazione di triangoli e interpolazione colore.
Visionati e provati codici raster_draw_color e persp_cube_color_sdl.
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.
(vedi lucidi: Coordinate Baricentriche e Proiezione Prospettica con Profondita').
- Gi.31/03/16, ore 16.30-18.30, Aula Cremona
, Lezione 11.
Ancora su Trasformazione prospettica con profondita': 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.
Algoritmo di scan conversion per poligoni generici;
rasterizzazione: specializzazione per triangoli;
estensione per scan conversion di triangoli con componenti colore; estensione con altri parametri quali
profondita' Z, coordinate colori, componenti normali, ecc..
(vedi lucidi: Algoritmi di Rasterizing).
- Ve.1/04/16, ore 14:00-16.00, Aula M1
, Lezione 12.
Ripresa la spiegazione dell'esercizio proposto nella Lezione 8, ed in particolare sul View-up Vector;
Proiezione prospettica con profondita' e gestione coordinate texture.
Cenni alla elaborazione di immagini per la rasterizzazione con texture.
Esaminato codice persp_cube_image_sdl.c con gestione corretta o meno delle coordinate texture.
Proposto esercizio da realizzare modificando il codice persp_cube_image_sdl.c
- Gi.7/04/16, ore 16.30-18.30, Aula Cremona
, Lezione 13.
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 Polygoni).
Pipeline grafica, schede grafiche (vedi lucidi: GPU e Pipeline Grafica);
- Ve.8/04/16, ore 14.00-16.00, Aula M1
, Lezione 14.
Seminario Dr.Flavio Bertini su: Interaction and Visualization in 3D Space
(vedi lucidi: Interaction_and_Visualization_3D);
- Lu.11/04/16, ore 8:50-10.30, Aula E1
, Lezione 15.
Discussione sugli esercizi assegnati il 4/3/16.
Introduzione alle librerie OpenGL: GL, GLU, GLX, AIGLX, GLUT,
macchina a stati finiti, pipeline OpenGL, un programma esempio con solo GL e GLX.
(vedi lucidi: Libreria Grafica OpenGL, parte I).
- Gi.14/04/16, ore 16.30-18.30, Aula Cremona
, Lezione 16.
Ancora su GL e GLX. Display list e double buffer; programmazione con le GLUT; un programma
esempio che usa GL e GLUT; pipeline delle trasformazioni in OpenGL: trasformazioni di modellazione,
trasformazioni di vista e di proiezione; programmi esempio e tutorial.
- Ve.15/04/16, ore 14.00-16.00, Aula M1
, Lezione 17.
Ancora su trasformazioni in OpenGL: esaminati alcuni codici di esempio e rivisitata
la pipeline grafica vista nel caso di OpenGL (vedi lucidi: Sull'esempio glut_simple_mult.c\).
Depth Buffer per la rappresentazione con rimozione parti nascoste.
Libreria SDL (Simple Directmedia Layer) con OpenGL; esaminati alcuni esempi.
(vedi lucidi: SDL con OpenGL).
- Gi.21/04/16, ore 16.30-18.30, Aula Cremona
, Lezione 18.
Esempio di progettazione di un codice di grafica 3D Real-Time (vedi archivio
progetto_car1516.tgz), (vedi lucidi: Progetto SDL/OpenGL).
Rappresentazione B-Rep (Boundary Representation) di oggetti 3D;
Introduzione alle mesh poligonali 3D; (vedi lucidi: Mesh 3D poligonali)
- Ve.22/04/16, ore 14.00-16.00, Aula M1
, Lezione 19.
Ancora su mesh 3D: formati .obj (wavefront), OFF, mesh; conversione formati e convertitori.
Elementi di una mesh, strutture dati, editing di mesh. Repository di mesh;
- Gi.28/04/16, ore 16.30-18.30, Aula Cremona
, Lezione 20.
Demo di utilizzo di Blender per editing di Mesh 3D.
(vedi lucidi: Blender: Introduzione al Mesh Editing )
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).
Thecniche 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).
- Ve.29/04/16, ore 14.00-16.00, Aula M1
, Lezione 21.
Ancora sul modello di illuminazione di Phong e su Tecniche di shading.
Illuminazione in OpenGL (luci e materiali); shading; tutorials e programmi.
(vedi lucidi: Libreria Grafica OpenGL, parte II).
ProgettoCAR passo 3: caricamento e rendering mesh in formato .obj, illuminazione scena e gestione luci.
- Gi.5/05/16, ore 16.30-18.30, Aula Cremona
, Lezione 22.
Texture mapping 2D; magnification, minification (mip-mapping); two-part mapping,
environment mapping; solid texture o 3D texture, texture procedurali, bump-mapping, multitexturing.
(Vedi Lucidi: Texture nella CG).
Texture in OpenGL: texture object dalla definizione all'applicazione. (Vedi Lucidi: Libreria Grafica OpenGL, parte III).
- Ve.6/05/16, ore 14.00-16.00, Aula M1
, Lezione 23.
ProgettoCAR passo 4: gestione joystick, applicazione e gestione texture, ecc.
- Gi.12/05/16, ore 16.30-18.30, Aula Cremona
, Lezione 24.
Shadowing: ombre su piani (proiezione), Shadow Buffer per ombre in un
algoritmo Z-Buffer (vedi lucidi: Shadowing). Esempi su ombre.
Tecniche di rendering in OpenGL (vedi lucidi: Rendering avanzato in OpenGL e glut).
Curve nella computer graphics: curve 2D e 3D in forma parametrica, curve di Bezier.
- Ve.13/05/16, ore 14.00-16.00, Aula M1
, Lezione 25.
Curve spline/nurbs; Esempi e demo con il sistema di modellazione blender
(vedi lucidi: Curve nella Computer Graphics).
Superfici nella computer graphics: superfici prodotto tensoriale, mesh da superfici;
Esempi e demo con il sistema di modellazione blender
(vedi lucidi: Superfici nella Computer Graphics).
Progetto d'esame
Download Lucidi
Download Documenti
Download Software
Libri
Siti
Chi segue il Corso
Torna alla
home page di Giulio Casciola