Costruzione di Interfacce

docente: Paolo Cignoni
email: cignoni@iei.pi.cnr.it

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, pdfcode (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, pdfcode (Moebius8, nota: la dir data non c'e; prendetela da moebius7)

Opengl selection, MFC menu e toolbar

Lez. 25

6/12

html, pdfcode (CISaver)

Anatomia di uno screen saver

Lez. 26

9/12

html, pdfcode (Moebius9)

XML, persistenza e serializzazione, Scene Graphs 

Lez. 27

11/12

html, pdfcode (Moebius10)

XML, persistenza e serializzazione, Scene Graphs 2a parte

Lez. 28

13/12

html, pdfcode (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

 

 

Orario
Materiale Didattico
Lucidi
FAQ
Progetto

 

Aggiornato martedì 17 dicembre 2002 alle 17.35