Obiettivi
Concetti e le tecniche di base per la progettazione di applicazioni
grafiche tridimensionali interattive.
Descrizione
Il corso introduce alle problematiche relative alla progettazione e
realizzazione di applicazioni interattive che facciano uso di grafica
tridimensionale. Vengono fornite le basi teoriche e algoritmiche per la
modellazione geometrica e il rendering di scene tridimensionali e gli
strumenti per realizzare sistemi basati su OpenGL in ambiente
Windows.
Programma
- Fondamenti di grafica
- Algoritmi per la modellazione geometrica e il rendering
- Librerie e framework per la grafica tridimensionale
- Progettazione e programmazione di interfacce e applicazioni grafiche
interattive in ambiente OpenGL Windows
Orario
E-mail del docente: cignoni@iei.pi.cnr.it
Ricevimento: Mercoledì 16-17 (Area CNR)
Giorno |
Aula |
dalle |
alle |
Lun |
A |
9 |
11 |
Mer |
A |
14 |
16 |
Ven |
A |
14 |
16 |
Riferimenti bibliografici
Grafica
- Interactive Computer Graphics: A top-down approach with OpenGL
(2nd edition) Edward Angel, Addison Wesley, 1999 ISBN:
020138597X
- Fondamenti di Computer graphics G. Attardi, Università di
Pisa, SEU, 1998.
- OpenGL 1.2 Programming Guide, 3rd edition: the official guide to
learning OpenGL, Version 1.2 Mason Woo, Jackie Neider, Tom
David, Dave Shriner; Addison Wesley, 1999 ISBN: 0201604582
C++
- B. Stroustrup: The C++ Programming Language
(3rd edition). Addison Wesley Longman, Reading, MA. 1997. ISBN 0-201-88954-4. 920 pages
disponibile anche in italiano:
- B. Stroustrup: C++ Linguaggio, Libreria Standard, Principi di Programmazione
3a Edizione, Addison Wesley Italia, 1015 pagine, 2000, ISBN: 8871920783
- J. Templeman, Olsen A. Visual C++ .net passo per
passo, Mondadori Informatica, 2002.
MFC
- Mastering: Sviluppo Mfc Con Microsoft Visual C++ 6.0
di Microsoft Corp.
MONDADORI INFORMATICA, 460 pagine, 2000, ISBN: 8883310837
- Mfc Programming In C++ With The Standard Template Libraries
di Murray W.h. / Pappas C.h.
PRENTICE HALL, 459 pagine, 2000, ISBN: 013016111X
- Introduction To Mfc Programming With Visual C++
di Jones R.m.
PRENTICE HALL, 312 pagine, 2000, ISBN: 0130166294
Risorse in linea:
Materiale Didattico
Software
Come studenti del corso dovreste aver diritto ad una licenza studenti di
Windows XP Professional e
di Visual Studio .Net.
Per la distribuzione di Visual.Studio .Net dovete
contattare direttamente gli operatori. Per XP ancora deve essere
attivata la procedura di distribuzione.
OpenGL
- La pagina principale OpenGL.org
- Copia in locale in pdf delle specifiche OpenGL
1.3
- Estensioni opengl, registro
ufficiale mantenuto dalla sgi
- extgl
piccola libreria per usare facilmente le estensioni di
OpenGL
- Elenco e specifiche delle estensioni che si
trovano sulle schede
GLUT
- Le due pagine principali:
- Lib,.h, .dll per win
glut.h va messo in
(visual studio 6) /Programmi/Microsoft Visual Studio/VC98/include/GL
(visual studio .NET) /Programmi/Microsoft Visual Studio .net/VC7/PlatformSDK/include/GL
- glut32.lib va messo in
(visual studio 6)/Programmi/Microsoft Visual Studio/VC98/lib
(visual studio .NET) /Programmi/Microsoft Visual Studio .net/VC7/PlatformSDK/lib
- manuale pdf
- glut faq
Texturing
DevIL:la
libreria usata e consigliata per leggere/salvare immagini.
Nota: le dll, lib e .h vanno installati,
come per glut, nelle appropriate directory del .net (vedi sopra) o in
delle directory a parte e vanno aggiunte tali directory tra le opzioni
del progetto (nei progetti che distribuisco si assume che si trovino in
C:\code\devil).
Solo le dll
(per gli utenti finali)
Manuale
Doc Html
Lib e include
librerie Debug
glpng una library per caricare texture
in formato png in OpenGL (page
ufficiale)
Immagini da usare come texture
Cube maps
Debevec www.debevec.org/probes
(vanno smontate a mano, sono composte in un'unica immagine in un formato
vertical cross ...)
http://www.1000skies.com/
Sono cieli che possono essere smontati per fare mezze cubemap.
texture
varie
http://www.the3dstudio.com/textures.asp
http://www.maxoncomputer.com/resources_browse.asp?catID=4
Archivi di modelli 3d da saccheggiare
3dcafe
polycount (modelli quake2)
http://www.maxoncomputer.com/resources
Librerie varie:
L3DS una libreria
per caricare oggetti in formato 3ds
Lucidi
Lez. 1 |
30/9 |
html,
pdf |
Intro, Pin hole Camera |
Lez. 2 |
2/10 |
html,
pdf |
Pipeline di rendering, Teoria del
Colore |
Lez. 3 |
4/10 |
html,
pdf, code |
Prima applicazione OpenGL tramite
glut |
Lez. 4 |
7/10 |
html,
pdf |
Sistemi di Riferimento |
Lez. 5 |
9/10 |
html, pdf,
code |
Trasformazioni Affini |
Lez. 6 |
11/10 |
html,
pdf |
Trasformazioni di Modellazione |
Lez. 7 |
14/10 |
html,
pdf, html, pdf,
code (Moebius) |
Esercitazione su trasf di
Modellazione |
Lez. 8 |
16/10 |
html,
pdf |
Shading |
Lez. 9 |
24/10 |
html,
pdf |
Rasterization |
Lez. 10 |
26/10 |
html,
pdf |
Clipping e HSR |
Lez. 11 |
28/10 |
html,
pdf, JavaToC++ |
From Java to C++ |
Lez. 12 |
30/10 |
html,
pdf, code (Slider) |
Esercitazione, costruzione di
uno slider |
Lez. 13 |
30/10 |
html,
pdf, |
From Java to C++ 2 |
Lez. 14 |
8/11 |
html,
pdf,code
(Moebius2) |
C++ e STL e Esercitazione
Moebius2 (Costruzione di una mesh) |
Lez. 15 |
11/11 |
html,
pdf, |
Algoritmi di rendering locale e
globale, Raytracing, Radiosity e Photon Mapping |
Lez. 16 |
13/11 |
html,
pdf, |
Primi passi con le MFC |
Lez. 17 |
15/11 |
html,
pdf, code (HelloMFC) |
Primi passi con le MFC,
Architettura document view |
Lez. 18 |
20/11 |
html,
pdf, code (MFCOpenGL) |
Opengl e MFC |
Lez. 19 |
22/11 |
html,
pdf, code
(Moebius3) |
Texture Mapping |
Lez. 20 |
25/11 |
html,
pdf, codebase
codeFinale (Moebius4) |
MFC MDI e doppia view con
splitter |
Lez. 21 |
27/11 |
html,
pdf, codebase
codeFinale (Moebius5) |
Gestione rotazioni e Trackball |
Lez. 22 |
29/11 |
html,
pdf, codebase
codeFinale (Moebius6) |
Estensioni Opengl CubeMap,
Multitexturing. Nota: se la vostra scheda non supporta le
cubemap sostituite i file CICubeMap,cpp e CICubeMap.h con
quelli in Moebius8 della lez. 24 |
Lez. 23 |
2/12 |
html,
pdf, codebase
codeFinale (Moebius7) |
Opengl Performance, 3D object
loading (quake2 e 3ds), cenni su scene graphs |
Lez. 24 |
4/12 |
html,
pdf, code
(Moebius8, nota: la dir data non c'e; prendetela da moebius7) |
Opengl selection, MFC menu e
toolbar |
Lez. 25 |
6/12 |
html,
pdf, code (CISaver) |
Anatomia di uno screen saver |
Lez. 26 |
9/12 |
html,
pdf, code
(Moebius9) |
XML, persistenza e
serializzazione, Scene Graphs |
Lez. 27 |
11/12 |
html,
pdf, code
(Moebius10) |
XML, persistenza e
serializzazione, Scene Graphs 2a parte |
Lez. 28 |
13/12 |
html,
pdf, code
(Moebius11) |
XML, persistenza e
serializzazione, Scene Graphs 3a parte |
Lez. 29 |
16/12 |
html,
pdf, |
Collision detection, Stencil
buffer, rendering to texture, fractal terrains |
FAQ
Q: Come funziona il progetto?
A: Vedi la sezione Progetto.
Q: Possiamo fare il progetto
in due?
A: Sì, consigliato, anche in tre va bene.
Q:Posso fare il progetto in: Java || C# || Delphi ||
linguaggio != C++ ?
A: No, il progetto deve essere in C++, usare OpenGL, e funzionare in ambiente Windows.
Q:Posso fare il progetto in C++
ma senza usare .Net e senza le MFC?
A: Sì, ma sappiate che farete molta più fatica, il progetto vi
verrà un po' peggio, e che il mio supporto sarà minore.
Q: Come faccio per avere .Net?
A: Dagli operatori del centro di calcolo.
Q: Come faccio per avere XP?
A: Ancora non lo so, ma tra breve dovrebbe essere disponibile.
Q: Non riesco a installare
.Net su Windows 98, Windows Me, Windows 3.11, ecc.. A chi mi devo
rivolgere?
A: Temo che ci voglia Win2k o WinXp, in ogni caso per problemi di
installazione chiedete aiuto agli operatori del centro di calcolo.
Q: Ho fatto un programma e non
funziona. Come mai?
A: Quando qualcosa non funziona siate, per favore, precisi.
Cercate sempre di sapermi dire cosa fallisce: Compilazione, linking o
durante l'esecuzione.
Se fallisce la compilazione o il linking, non arrendetevi subito. Leggete
l'help del visual studio riguardo all'errore e cercate di capire perché
non compila. Provate sempre a compilare il progetto che non funziona sulla
macchina di un vostro collega.
Se fallisce durante l'esecuzione usate il debugger per vedere dove avviene
il fallimento del programma. Se non riuscite ad uscirne fuori da soli,
provate a chiedere aiuto ad un collega. Se anche questo tentativo
fallisce, segnatevi il più dettagliatamente possibile come avviene il
fallimento (messaggi di errore ecc), e insieme ai colleghi con cui avete provato, venite a
chiedermi aiuto.
Q: Perchè quando compilo un
sorgente stile glut, la fase di linking fallisce dicendo che non
trova 'WinMain?
A: Perchè avete fatto un progetto del tipo sbagliato: deve
essere win32/console application, empty project (vedi lucidi lez 3).
Q: Perchè quando compilo mi
trova un errore dentro stdlib.h (redefinition of exit)?
A: Perchè avete incluso glut prima di stdlib.h.
Q: Cosa faccio con IUF+IUP?
A: Per quello che so, sono possibili le
seguenti mutuazioni:
-
IUP
+ ISI = Programmazione avanzata
-
LFC
+ ISI = Programmazione avanzata
-
IUF
+ IUP = Costruzione di Interfacce con 3 crediti in avanzo
-
IUF
= Costruzione di Interfacce con 3 crediti di debito
Q: Con chi devo dare IUF+IUP?
A: Fino a gennaio 2003 è ancora possibile, per chi fosse iscritto
secondo il vecchio ordinamento, consegnare il progetto di IUF+IUP al prof.
Attardi. Essendo il docente di CI e non di IUF/IUP, non credo
possiate dare IUF+IUP con me.
Il Progetto
Il progetto finale deve essere costituito da due applicazioni e una
pagina web di descrizione del progetto. Le due applicazioni devono essere
scritte in C++, devono funzionare in ambiente windows (2k e XP), e devono
sfruttare OpenGL per il rendering tridimensionale. Le due applicazioni si
devono integrare a vicenda, la prima applicazione, detta editor, ha
un'interfaccia più complessa della seconda e ha come finalità la
creazione di documenti che dovranno essere mostrati interattivamente dalla
seconda applicazione detta player. Alcuni esempi di coppie di applicazioni
che rispondono allo schema proposto:
- game e editor di livelli,
- screen saver e relativo configuratore/editor,
- simulatore di un qualche fenomeno (fisico biologico) e programma per
fare il setup della simulazione.
Normalmente capiterà che l'editor sara di gran
lunga la più complessa delle due applicazioni, e condividerà con il
player il codice per visualizzare in opengl il documento (ovviamente
l'editor userà opengl per mostrare il documento durante l'editing e MFC/gdi
di windows per le parti di interfaccia fuori dal contesto opengl. La pagina web che descrive l'applicazione è parte integrante del
progetto stesso e deve contenere almeno:
- una breve descrizione del progetto e delle sue caratteristiche
principali;
- alcuni screenshot delle applicazioni che costituiscono il
progetto;
- uno zip contenente il progetto stesso; lo zip dovrà
contenere:
- gli eseguibili,
- tutte le dll necessarie e non standard
- i sorgenti
- documentazione minimale
La documentazione minima consiste in un documento html con una
descrizione del progetto e un breve tutorial step-by-step di una tipica
sessione d'uso del sistema. Gli studenti che temono di essere copiati
possono, anche se non è consigliato, proteggere con password lo zip dei
sorgenti; in ogni caso devono rendere possibile a tutti il download degli
eseguibili. Il progetto può essere realizzato in gruppo (da una a tre
persone), ovviamente più il gruppo è numeroso più mi aspetto sia
consistente il progetto.
Ricordatevi che il vostro ruolo è quello di progettare e realizzare
un'applicazione e non quello di disegnare/modellare oggetti e icone. Anche
se è divertente non perdete troppo tempo a disegnare i modelli 3d del
progetto, prendeteli pure dalla rete.
La scelta del progetto è ragionevolmente libera (purché ovviamente
rispecchi quanto detto sopra), comunque prima di mettervi a delineare con
precisione le specifiche del vostro progetto è meglio che veniate a fare due parole con
me, al termine della lezione, per sapere se, a grandi linee, il
progetto è ben proporzionato. In mancanza di idee potete scegliere uno
degli Esempi di Progetto. In ogni caso quando
iniziate il progetto mandatemi una mail (non vincolante) con:
- nomi dei componenti del gruppo,
- brevi specifiche del progetto (basta una paginetta rtf/html),
- molto approssimativamente, quando volete consegnare il progetto.
La consegna del progetto avviene in tre fasi:
- Mi mandate via email l'indirizzo della pagina web che contiene il
progetto;
- Scarico e provo il sistema (ciò può richiedere alcuni
giorni)
- Discussione del progetto
Esempi di Progetto:
Flipper: L'editor permette di costruire un
flipper a partire da un certo numero di elementi personalizzabili, come
bouncer, spondine ecc. La personalizzazione degli elementi può riguardare
ad esempio, il colore, la texture i punti che da ecc. Il player permette
di giocare simulando in maniera ragionevole il comportamento della
pallina. Non è necessario che sia possibile creare un qualsiasi flipper.
È ragionevole imporre alcuni vincoli sulla struttura del flipper: solo 2D
(no rampe), flipper e corsia di accesso in posizione fissa, ecc.
Labirinto: Simulazione di un antico gioco da
bar anni 60/70. Il giocatore deve attraversare con una pallina un
labirinto che è sparso di trabocchetti (buche, calamite, colla, ghiaccio).
Il giocatore controlla la pallina cambiando, con il mouse, l'inclinazione
del piano del labirinto, la gravità. L'editor permette di costruire il
labirinto e di piazzare i vari trabocchetti.
Moebius Screen Saver: Questo progetto ve lo faccio io
a lezione, l'editor dovrebbe permettere di costruire, texturare e configurare una
gran varietà di anelli di moebius con vari oggetti (palline, omini) che
ci corrono sopra e scritte sparse. il risultato è usato poi da uno screen
saver.
Simulatore di stormi: Il comportamento di uno
stormo di uccelli è simulabile abbastanza semplicemente (ogni uccello
cerca, più o meno di andare verso la media dello stormo), con un gran
numero di parametri. L'editor permette di configurare i parametri del
comportamento dello stormo, definire l'icona del singolo uccello (un
triangolo o poco più, visto che sono tanti) e piazzare oggetti che
attraggono/respingono/distruggono/generano uccelli. Il player è un
semplice screen saver.
Come valuto il progetto
In ordine di importanza:
Interfaccia |
completezza,
semplicità, eleganza |
Molto |
Sorgenti |
OO, strutturazione,
pulizia |
Molto |
Feature |
quante cose fa
l'interfaccia, effetti OpenGL |
Molto |
Eseguibile |
robustezza,
efficienza, portabilità |
Abbastanza |
Documentazione |
completezza,
accuratezza |
Abbastanza |
Grafica e audio |
nel senso di quanto è
bella, curata, originale |
Poco |
|
|