Grafica (C.d.S. Magistrale in Informatica) A.A.2011/12
(2^ semestre, 2^ anno)
Esame progetto e orale
CFU 6
Docente Prof. Giulo Casciola
Venerdi' 25/5/2012 Aula Bombelli ore 8:30-10:30
Seminario tenuto da Dr.Raffaele Bratta su
OGRE: un motore grafico 3D open-source
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
- A.Watt, 3D Computer Graphics, II edition, Addison Wesley (1993);
- 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)
Iscrizione al Corso:
file txt da rispedire per e-mail al docente.
Orario delle Lezioni
- Le lezioni inizieranno il 22 febbraio 2012 con il seguente orario:
Mer. ore 08.30-10.30 Aula Ercolani 1
Ven. ore 08.30-10.30 Aula Ercolani 2
Lezioni e Argomenti trattati
- Me.22/02/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 1.
Introduzione al corso: equazione "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 le sue Applicazioni).
- Ve.24/02/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 2.
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)
- Me.29/02/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 3.
Sistema X Window: architettura del sistema, X Client, rete,
X Server, X Protocol, Xlib, Window Manager, XClient che usa Toolkit.
XClient che usa solo Xlib; 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.
Alcune esempi di XClient (xterm, xclock, xlogo, xcalc, xedit, bitmap, xfig).
(vedi lucidi: XWindow System)
- Ve.02/03/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 4.
Altre informazioni su X (xorg.conf, Depth e Backingstore, xdpyinfo).
Elementi di programmazione X Window: esaminati alcuni semplici programmi
Client che fanno esclusivo uso di Xlib. Messo a disposizione un archivio di
semplici programmi da provare e modificare (vedi download xprg_1112.tgz).
Introduzione alla libreria SDL (Simple Directmedia Layer).
(vedi lucidi: Simple Directmedia Layer)
- Me.07/03/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 5.
Elementi di programmazione SDL: esaminati alcuni semplici programmi
che fanno uso di SDL. Messo a disposizione un archivio di
semplici programmi da provare e modificare.
Algoritmo di linea incrementale, algoritmo di linea di Bresenham.
(vedi lucidi: Algoritmi di Disegno 2d), (vedi Dispensa: Algoritmi di Grafica 2d).
- Ve.09/03/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 6.
Algoritmo Two Array Mask. Visionate le relative implementazioni per XWindow (archivio xpr1112.tgz).
Rappresentazione B-Rep (Boundary Representation) di oggetti 3D;
Mesh poligonali 3D; formati .m, .ply, .mesh, wavefront .obj, OFF;
conversione formati e convertitori (vedi archivio converter.tgz)
- Me.14/03/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 7.
Elementi di una mesh, strutture dati, editing di mesh.
Repository di mesh; pacchetti per visualizzazione di mesh.
(vedi lucidi: Mesh poligonali 3D )
Demo di utilizzo di Blender per editing di Mesh 3D.
(vedi lucidi: Blender: Introduzione al Mesh Editing )
- Ve.16/03/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 8.
Trasformazioni geometriche 3D; trasformazioni elementari:
traslazione, scala, rotazione. Spazio affine: punti, vettori, combinazioni affini.
Spazio affine: sistema di riferimento, trasformazioni affini, composizione di
trasformazioni mediante prodotto di matrici; trasformazioni elementari:
traslazione, scala, rotazione rispetto agli assi coordinati.
Composizione di trasformazioni, trasformazioni inverse.
Trasformazioni composte come rotazione e scala rispetto ad un asse e a un punto.
- Ve.23/03/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 9
Cambio di sistema di riferimento. Cambio di base e cambio di sistema di riferimento.
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 via base con View_Up vector;
Trasformazione window-viewport.
Tronco di piramide di vista (frustum) e necessita' di clipping 3D.
Demo su programma persp_cube.c (in xprg1) chee implementa la trasformazione di vista
visualizzando un cubo.
Proposti 6 esercizi da realizzare modificando il codice persp_cube.c.
(vedi lucidi: Trasformazioni di Vista)
- Me.28/03/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 10.
Clipping 2D di linee: algoritmo di Cohen-Sutherland.
Estensione dell'algoritmo di Clipping 2D di linee
al caso 3D (vedi lucidi: Clipping di linee).
Clipping 2D di poligoni: algoritmo di Sutherland-Hodgman; estensione al caso 3D
(vedi lucidi: Clipping Polygons).
Introduzione agli algoritmi di real-time rendering: depth-cueing, hidden-line
e hidden-surface.
- Ve.30/03/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 11
Introduzione all'algoritmo Z-buffer per l'Hidden-Surface Removal di mesh
poligonali; descrizione dell'algoritmo in termini di pseudocodice e significato
del buffer Z (vedi lucidi: Real-Time Rendering), (vedi dispensa: Real-Time Rendering).
Coordinate Baricentriche; esempio di applicazione: rasterizzazione di triangoli e
interpolazione colore.
(Vedi programmi esempio che implementano la rasterizzazione di triangoli con facce
colorate e texturate, via coord. baricentriche).
- Me.04/04/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 12.
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.
Rivisitata Trasformazione di Vista per Z-Buffer.
Cenno ad algoritmi di rasterizzazione (vedi lucidi: Algoritmi di Rasterizing) e
indicati programmi che implementano visualizzazione di un cubo texturato con
correzione prospettica o meno.
- Me.11/04/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 13.
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..
Proposti 3 esercizi da realizzare modificando il codice persp_cube_image.c.
Breve introduzione alla elaborazione di immagini per la rasterizzazione con
texture.
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.
- Ve.13/04/12, ore 08.30-10.30, Aula Ercolani 2
, 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.18/04/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 15.
Ancora su trasformazioni in OpenGL: esaminati alcuni piccoli codici di esempio;
Depth Buffer per la rappresentazione con rimozione parti nascoste.
Libreria SDL (Simple Directmedia Layer) con OpenGL; esaminati alcuni esempi.
(vedi lucidi: SDL con OpenGL).
- Ve.20/04/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 16
Seminario: Dr. Giuseppe Maggiore, XNA e tecniche di sviluppo di videogiochi in ambiente Windows.
- Ve.27/04/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 17
Esempio di progettazione di un codice di grafica 3D Real-Time (vedi archivio
progetto_car1112.tgz), (vedi lucidi: Esempio SDL/OpenGL; vedi codice relativo).
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.
(vedi lucidi: Modello di illuminazione di Phong).
- Me.02/05/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 18.
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.
Illuminazione in OpenGL (luci e materiali); shading; alcuni tutorials e programmi.
(vedi lucidi: Libreria Grafica OpenGL, parte II).
- Ve.04/05/12, ore 08.30-11.30, Aula Ercolani 2
, Lezione 19
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).
Progettazione di un codice di grafica 3D Real-Time (Parte II) (vedi archivio
progetto_car2_1112.tgz), (vedi lucidi: Esempio SDL/OpenGL Parte II; vedi codice relativo).
tutorial su texture, semplici programmi di esempio.
- Me.09/05/12, ore 08.30-10.30, Aula Ercolani 1
, Lezione 20.
Ancora su: Progettazione di un codice di grafica 3D Real-Time; esaminate parti di codice relative a
gestione texture, camera, joystick, fps, ecc.
Visionati alcuni programmi di esempio ed in particolare gc_smooth basato su libreria glm.
Shadowing.
- Ve.11/05/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 21
Ancora su shadowing: ombre su piani (proiezione), Shadow Buffer per ombre in un
algoritmo Z-Buffer. (vedi lucidi: Shadowing).
Tecniche di rendering OpenGL: allocazione di buffer e abilitazione di test.
(vedi lucidi: Rendering avanzato in OpenGL e glut).
- Ve.18/05/12, ore 08.30-10.30, Aula Ercolani 2
, Lezione 22
Ancora su rendering avanzato in OpenGL.
Color Buffer, Depth Buffer, Stencil Buffer, Accumulation Buffer e test;
applicazioni; esempi per ombre, riflessione e trasparenza:
demo con semplici programmi in OpenGL.
Introduzione alle curve e superfici in forma parametrica nella computer graphics.
- Me.23/05/12, ore 08.30-10.30, Aula Bombelli (Dip.Matematica)
, Lezione 23.
Ancora su curve e superfici: curve di Bezier, curve B-spline e curve NURBS;
patch di Bezier, superfici B-spline e superfici NURBS; valutazione approssimata
e valutazione esatta; tassellazione per passare da curve/superfici a mesh
(vedi Lucidi: Curve e Superfici in forma parametrica nella CG).
Introduzione a curve e superfici NURBS in OpenGL
(vedi Lucidi: Libreria Grafica OpenGL (parte IV)).
- Ve.25/05/12, ore 08.30-10.30, Aula Bombelli (Dip.Matematica)
, Lezione 24
Seminario: Dr. Raffaele Bratta, OGRE: un motore grafico 3D open-source.
(Vedi archivio Ogre.tgz con slide ed esempi)
Progetto d'esame
3D Game con OpenGL Assegnato il giorno 18/05/12
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)
Dispensa:
Algoritmi di Grafica 2d (file.pdf)
Lucidi:
Algoritmi di Disegno 2d (file.pdf)
Dispensa:
Trasformazioni Geometriche e di Vista (file.pdf)
Lucidi:
Mesh 3D Poligonali (file.pdf)
Lucidi:
Blender: introduzione al mesh editing (file.pdf)
Documento:
Basic Linear Algebra (file.pdf)
Lucidi:
Trasformazioni di vista (Viewing 3D) (file.pdf)
Lucidi:
Clipping di linee (file.pdf)
Lucidi:
Clipping polygons (file.pdf)
Lucidi:
Real Time Rendering (file.pdf)
Dispensa:
Real-Time Rendering (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:
Esempio SDL/OpenGL (file.pdf)
Lucidi:
Modello di Illuminazione di Phong (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte II) (file.pdf)
Lucidi:
Texture nella CG (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte III) (file.pdf)
Lucidi:
Esempio SDL/OpenGL Parte II (file.pdf)
Lucidi:
Shadowing (file.pdf)
Lucidi:
Rendering Avanzato in OpenGL e glut (file.pdf)
Lucidi:
Curve e Superfici in forma parametrica nella CG (file.pdf)
Lucidi:
Libreria Grafica OpenGL (parte IV) (file.pdf)
Download Software
xprg_1112.tgz (programmi che utilizzano solo Xlib)
SDLprg_1112.tgz (programmi che utilizzano solo SDL)
converter.tgz (archivio script di conversione formati mesh)
trimlibrary.tar.gz (libreria per visualizzazione mesh .m)
archivio Ball.tgz (codice esempio Ferrari)
archivio BouncingBalls.tgz (codice esempio Zamagni)
opengl_1112.tgz
progetto_car_1112.tgz
progetto_car2_1112.tgz
opengl_1112_add.tgz
Ogre.tgz
Siti
ucsc links
Siti vari
Siti OpenGL
A Blender Page
Torna alla
home page di Giulio Casciola