Grafica (C.d.S. Magistrale in Informatica) A.A.2013/14
(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
- J.D.Foley, A.Van Dam, S.K.Feiner, J.F.Hughes, Computer Graphics
principles and practice, II edition, Addison Wesley (1990)
- R.Scateni, P.Cignoni, C.Montani, R.Scopigno, Fondamenti di grafica
tridimensionale interattiva, McGraw-Hill (2005)
- S.R.Buss, 3D Computer Graphics: A Mathematical Introduction with OpenGL,
Cambridge University Press (2003)
- P.Shirley, Fundamentals of Computer Graphics, A.K.Peters (2005)
Iscrizione al Corso:
file txt da rispedire per e-mail al docente.
Orario delle Lezioni
- Le lezioni sono iniziate il 26 febbraio 2014 con il seguente orario:
Mer. ore 08.30-10.30 Aula Ercolani 3
Ven. ore 08.30-11.30 Aula Ercolani 3
- Dal 5 marzo, l'orario diventa:
Mer. ore 16.00-18.00 Laboratorio Linux (Dip.Matematica)
Gio. ore 09.00-11.00 Laboratorio Linux (Dip.matematica)
Lezioni e Argomenti trattati
- Me.26/02/14, ore 08.30-10.30, Aula Ercolani 3
, 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).
- Ve.28/02/14, ore 09.00-11.00, Aula Ercolani 3
, Lezione 2.
Introduzione ad alcune applicazioni della grafica 3D.
(vedi lucidi: La Grafica e le sue Applicazioni).
- Me.5/03/14, ore 16:00-18.00, Lab. Linux
, 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)
- Gi.6/03/14, ore 9:00-11.00, Lab. Linux
, 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)
- Me.12/03/14, ore 16.00-18.00, Lab. Linux
, Lezione 5.
Introduzione alla libreria SDL (vedi lucidi: Simple Directmedia Layer).
Elementi di programmazione SDL: esaminati semplici programmi di disegno 2D.
Messo a disposizione un archivio di semplici programmi da provare e modificare.
- Gi.13/03/14, ore 9:00-11.00, Lab. Linux
, Lezione 6.
Ancora su libreria SDL: gestione eventi, testo, immagini, tempo.
SDL ed il disegno di linee: algoritmo di linea incrementale,
algoritmo di linea di Bresenham (funzione GC_draw_line).
Visionato un codice per grafica di oggetti animati con gestione del tempo.
- Me.19/03/14, ore 16.00-18.00, Lab. Linux
, 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.
- Gi.20/03/14, ore 9:00-11.00, Lab. Linux
, 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;
Trasformazione window-viewport.
- Me.26/03/14, ore 16.00-18.00, Lab. Linux
, Lezione 9.
Tronco di piramide di vista (frustum) e necessita' di clipping 3D.
Demo su programma persp_cube_sdl.c che implementa la trasformazione di vista
visualizzando un cubo.
Proposti alcuni esercizi da realizzare modificando il codice persp_cube_sdl.c
(vedi lucidi: Trasformazioni di Vista)
Messo a disposizione MiniSystem e relativa GUI (vedi Download)
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).
- Gi.27/03/14, ore 9:00-11.00, Lab. Linux
, Lezione 10.
Clipping 2D di poligoni: algoritmo di Sutherland-Hodgman; estensione al caso 3D
(vedi lucidi: Clipping di Polygoni).
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).
- Me.2/04/14, ore 16.00-18.00, Lab. Linux
, Lezione 11.
Coordinate Baricentriche; esempi: rasterizzazione di triangoli e interpolazione colore.
Relazione fra le coordinate baricentriche di un segmento 3D (triangolo) e
del suo proiettato e "profondita' di un pixel". Trasformazione prospettica modificata;
verifica di trasformazione di rette in rette e di piani in piani;
trasformazione come deformazione dello spazio;
parametri alpha e beta; profondita' Z di un pixel.
(vedi lucidi: Coordinate Baricentriche e Proiezione Prospettica con Profondita').
- Gi.3/04/14, ore 9:00-11.00, Lab. Linux
, Lezione 12.
Rivisitata pipeline di vista.
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..
Cenni alla elaborazione di immagini per la rasterizzazione con texture.
Proposti 3 esercizi da realizzare modificando il codice persp_cube_image_sdl.c
(vedi lucidi: Algoritmi di Rasterizing).
- Me.9/04/14, ore 16.00-18.00, Lab. Linux
, Lezione 13.
Pipeline grafica, schede grafiche (vedi lucidi: GPU e Pipeline Grafica);
Introduzione alla libreria OpenGL; GL, GLX, GLU, GLUT,
macchina a stati finiti, pipeline OpenGL, un programma esempio con solo GL e GLX.
- Gi.10/04/14, ore 9:00-11.00, Lab. Linux
, Lezione 14.
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.
(vedi lucidi: Libreria Grafica OpenGL, parte I).
- Me.16/04/14, ore 16.00-18.00, Lab. Linux
, Lezione 15.
Ancora su trasformazioni in OpenGL: esaminati alcuni piccoli codici di esempio e rivisitata
la pipeline grafica vista nel caso di OpenGL.
- Me.23/04/14, ore 16.00-18.00, Lab. Linux
, Lezione 16.
- Seminario Dr.Flavio Bertini su: Interaction and Visualization 3D - Methods and Technologies
(vedi Lucidi relativi).
- Gi.24/04/14, ore 9:00-11.00, Lab. Linux
, Lezione 17.
Depth Buffer per la rappresentazione con rimozione parti nascoste.
Libreria SDL (Simple Directmedia Layer) con OpenGL; esaminati alcuni esempi.
(vedi lucidi: SDL con OpenGL).
Esempio di progettazione di un codice di grafica 3D Real-Time (vedi archivio
progetto_car1314.tgz), (vedi lucidi: Progetto SDL/OpenGL).
- Me.30/04/14, ore 16.00-18.00, Lab. Linux
, Lezione 18.
Introduzione al modello di illuminazione di Phong:
luce ambiente e riflessione diffusa; sorgente di luce puntiforme con
riflessione diffusa e speculare; equazioni del modello di Phong (parametri legati
al materiale e parametri legati alla luce), posizione osservatore e geometria della
scena (normali, angoli di incidenza, angoli di riflessione). Tecnica Flat-shading.
Gouraud-shading e Phong-shading per la determinazione del colore da assegnare
ad ogni pixel dell'immagine. Interpolazione colore e interpolazione normali per
le tecniche di shading. (vedi lucidi: Modello di illuminazione di Phong).
- Me.7/05/14, ore 16.00-18.00, Lab. Linux
, Lezione 19.
Illuminazione in OpenGL (luci e materiali); shading; tutorials e programmi.
(vedi lucidi: Libreria Grafica OpenGL, parte II).
Rappresentazione B-Rep (Boundary Representation) di oggetti 3D;
Mesh poligonali 3D; formati .m, .ply, .mesh, wavefront .obj, OFF;
conversione formati e convertitori.
- Gi.08/05/14, ore 9:00-11.00, Lab. Linux
, Lezione 20.
Elementi di una mesh, strutture dati, editing di mesh.
Repository di mesh; (vedi lucidi: Mesh poligonali 3D )
Demo di utilizzo di Blender per editing di Mesh 3D.
(vedi lucidi: Blender: Introduzione al Mesh Editing )
- Me.14/05/14, ore 16.00-18.00, Aula Vitali
, Lezione 21.
Seminario Dr.Michele Antonelli su: Geometric Modeling and Splines (vedi Lucidi relativi).
- Gi.15/05/14, ore 9:00-11.00, Lab. Linux
, Lezione 22.
Curve di Bezier e percorso camera (vedi codice bezier3d); progettoCAR passo 3: gestione luci,
caricamento e rendering mesh in formato .off, gestione joystick. progetto gc_smooth: libreria
glm per caricamento e rendering mesh in formato .obj.
- Me.21/05/14, ore 16.00-18.00, Lab. Linux
, Lezione 23.
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).
- Gi.22/05/14, ore 9:00-11.00, Lab. Linux
, Lezione 24.
Ancora su texture in OpenGL; ripreso progettazione di un codice di grafica 3D Real-Time;
Shadowing: ombre su piani (proiezione), Shadow Buffer per ombre in un
algoritmo Z-Buffer (vedi lucidi: Shadowing). Esempi su ombre.
Tecniche di rendering OpenGL: allocazione di buffer (Color, Depth, Stencil, Accumulation)
e abilitazione di test (vedi lucidi: Rendering avanzato in OpenGL e glut).
Progetto d'esame
3D Game con OpenGL Assegnato il giorno 24/04/14
Download Lucidi e Dispense
Lucidi:
Introduzione al Corso (file.pdf)
Lucidi:
La Grafica e le sue Applicazioni (file.pdf)
Lucidi:
Hardware e Software per Grafica Interattiva (file.pdf)
Lucidi:
XWindow System (file.pdf)
Lucidi:
Simple Directmedia Layer) (file.pdf)
Lucidi:
Esempi SDL (file.pdf)
Lucidi:
Trasformazioni Geometriche (file.pdf)
Lucidi:
Trasformazioni di vista (Viewing 3D) (file.pdf)
Lucidi:
Clipping di punti e line (file.pdf)
Lucidi:
Clipping di polygoni (file.pdf)
Lucidi:
Real Time Rendering (file.pdf)
Lucidi:
Coordinate Baricentriche e Proiezione Prospettica con Profondita' (file.pdf)
Lucidi:
Algoritmi di Rasterizing (file.pdf)
Lucidi:
GPU e Pipeline Grafica (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte I) (file.pdf)
Lucidi:
SDL con OpenGL (file.pdf)
Lucidi:
sull'esempio glut_simple_mult.c (file.pdf)
Lucidi:
Seminario Interazione e Visualizzazione 3D (file.pdf)
Lucidi:
Progetto SDL/OpenGL (file.pdf)
Lucidi:
Modello di Illuminazione di Phong (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte II) (file.pdf)
Lucidi:
Mesh 3D Poligonali (file.pdf)
Lucidi:
Blender: introduzione al mesh editing (file.pdf)
Lucidi:
Seminario Geometric Modeling and Splines (file.pdf)
Lucidi:
Texture nella CG (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte III) (file.pdf)
Lucidi:
Shadowing (file.pdf)
Lucidi:
Rendering Avanzato in OpenGL e glut (file.pdf)
Download Manuali ed altro
3DCG (file.pdf)
FCG (file.pdf)
Manuale SDL 1.2 (file.pdf)
Argomenti dalla rete (file.pdf)
Basic Linear Algebra (file.pdf)
Download Software
derek.tgz (programma esempio che usa solo Xlib)
SDLprg_1314.tgz (programmi che utilizzano solo SDL)
SDLprg_1314_2.tgz (ulteriori programmi con SDL)
mini_system.tgz (codice MiniSystem)
mini_system_gui_only.tgz (codice GUI per MiniSystem e guida di utilizzo)
opengl_1314.tgz (programmi OpenGL)
SDLprg_1314_3.tgz (esempi OpenGL+SDL)
progetto_car_1314.tgz
opengl_1314_add.tgz (nuovi programmi OpenGL)
Siti
Siti vari
Siti OpenGL
Chi segue il Corso
Studenti
Torna alla
home page di Giulio Casciola