Costruzione di Interfacce aa 03/04

docente: Paolo Cignoni
email: p.cignoni@isti.cnr.it
(iniziate sempre il soggetto delle vostre mail con il tag [CI])

 

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

Ricevimento, su appuntamento, preferibilmente il lun/mer/ven in tarda mattinata, nel mio ufficio presso l'ISTI all'Area CNR, o per chi non vuole spostarsi, dopo la lezione nei lab del polo didattico marzotto.
Email: p.cignoni@isti.cnr.it

Forum

 http://it.groups.yahoo.com/group/CostruzioneDiInterfacce/

Per tutte le domande riguardanti i temi del corso ho messo su un forum su yahoo. Vi chiedo di mandare le vostre domande li' dove le risposte potranno essere consultate anche da altri. Usate il mio indirizzo di l'email per ricevimenti e simili. Ovviamente potete anche rispondere a quesiti posti da altri studenti, nel qual caso, terro' in buona considerazione il fatto. Quando sollevate un problema nel forum e poi lo risolvete da soli e' buona educazione dire a tutti come avete fatto.

 

Giorno

Aula

dalle

alle

Lun

A

14

16

Mer

A

14

16

Ven

A

14

16

Il compitino 

Testo e Soluzione e Risultati

 

Riferimenti bibliografici

Grafica

  • Interactive Computer Graphics: A top-down approach with OpenGL (2nd/3rd edition)  Edward Angel, Addison Wesley, 1999  ISBN: 020138597X
    testo di riferimento per la parte relativa alla grafica 3d in generale
  • 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

Materiale Didattico

Software

Come studenti del corso dovreste aver diritto ad una licenza studenti di Windows XP Professional e di Visual Studio .Net e Qt per windows. 

Per la distribuzione del software di Visual.Studio .Net dovete contattare direttamente gli operatori. Dovrebbe essere necessario che abbiate attivato l'account per CI. Maggiori info a proposito della distribuizione del software cui avete diritto le trovate a http://www.cli.di.unipi.it/prestiti.

OpenGL

SDL

  • La pagina principale libsdl.org
  • Le librerie da scaricarsi ed installarsi a casa sono quelle che trovate a http://www.libsdl.org/download-1.2.php
    in particolare vi servono le developement libraries. Il package con i sorgenti puo essere utile giusto per curiosita' e quello chiamato 'runtime libraries' contiene solo le dll, che chiaramente non vi bastano per compilare.

Archivi di modelli 3d da saccheggiare

Librerie varie:

  • L3DS una libreria per caricare oggetti in formato 3ds
  • Lib3ds una libreria per caricare oggetti 3ds ragionevolmente affidabile (quella che ho fatto vedere a lezione)
  • 3DS File Toolkit  la libreria ufficiale fatta e distribuita dagli autori del 3ds/3dsmax

 

 

 


Lucidi

 

 

 

 

 

last updated on

Lez.  1

30/09

pdf

Intro, Pin hole Camera, Cenni sulla pipeline di rendering

 

30/9

Lez.  2

01/10

pdf

Colore, Sistemi di riferimento

 

1/10

Lez.  3

03/10

pdf

Esercitazioni, primo esempio SDL e opengl

Sierpinski code

9/10

Lez.  4

06/10

pdf

Cambio di sistemi di riferimento e trasformazioni

 

6/10

Lez.  5

08/10

pdf

Composizione di trasformazione e proiezioni 

 

7/10

Lez.  6

10/10

pdf

Esercitazione su composizioni di trasformazioni in opengl

Moebius SDL code

10/10

Lez.  7

13/10

pdf

Shading, Modello di Phong, Shading goureaud e Phong

 

12/10

Lez.  8

15/10

pdf, htm

Rasterizzazione

 

3/11

Lez.  9

17/10

pdf

Esercitazione: poligoni materiali e luci

Moebius2 SDL code

17/10

Lez. 10

20/10

pdf

Da java al C++ 1

 

17/10

Lez. 11

22/10

pdf

Da java al C++ 2

 

17/10

Lez. 12

24/10

pdf

STL e Containers

 

17/10

Lez. 13

27/10

pdf

Clipping e HSR

 

26/10

Lez. 14

29/10

pdf

Rendering Locale e Globale, Raytracing e Radiosity 

 

29/10

Lez. 15

31/10

pdf

Esercitazioni: costruzione procedurale di una mesh

Moebius3 SDL code

3/11

Lez. 16

7/11

pdf

QT introduzione (1)

 

7/11

Lez. 17

10/11

pdf

QT introduzione (2)

 

10/11

Lez. 18

12/11

pdf

QT introduzione (3)

 

12/11

Lez. 19

14/11

pdf

QT introduzione (4)

 

14/11

Lez. 20

17/11

pdf

QT + GL 

QTMoebius code

18/11

Lez. 21

19/11

pdf

Gestione interattiva delle rotazioni, Trackball

QTMoebius
Trackball
code

21/11

Lez. 22

21/11

pdf

Texture Mapping teoria e pratica

QTMoebiusTexture
 
code

23/11

Lez. 23

24/11

pdf

Opengl Optimizations, 3ds loading e Scene Graphs

QTMoebius3ds
 
code

25/11

Lez. 24

26/11

pdf

Scene Graphs, XML e SDL+QT

QTSDLMoebius
 
code

26/11

Lez. 25

28/11

pdf

XML QT e MD2

 code

2/12

Lez. 26

1/12

pdf

XML, Scene Graphs I/O

 code

2/12

Lez. 27

3/12

pdf

Estensioni Opengl

 code

5/12

Lez. 28

5/12

pdf

Interfaccia dell'editor

 code, code

7/12

Lez. 29

10/12

pdf

Ancora sull’editor

code, code

17/12

Lez. 30

15/12

pdf

Ancora sull’editor

code, code

17/12


FAQ

Q: Come faccio ad iscrivermi al forum del corso?
A: clicca qui.

Q: Non mi va qualcosa nel progetto, come devo mandarle i sorgenti?
A: Postate lo ZIP con i sorgenti nello spazio documenti del forum, non come allegato al messaggio perche' altrimenti non viene salvato nell'archivio messaggi del forum.
 Il file deve contenere SOLO quello che serve, cancellate tutti i file che non servono (e.g. niente *.ncb, *.suo, *.aps, *.ilk *.pdb, dir debug e dir release e copie delle lib e dll di cui sotto) dati inutili e settate bene le opzioni di compilazione del progetto, sia per debug che per release. Se avete bisogno di dir  include e lib aggiuntive settate le dir nel progetto assumendo che si trovino in "C:\code\*". sul mio pc trovate QT nel posto standard e le seguenti lib:
C:\code\DevIL
C:\code\lib3ds-1.2.0
C:\code\SDL-1.2.5
C:\code\SDL-1.2.6 a
C:\code\glew  
Se non mi compila perche' cercate qualcuna delle dir di cui sopra da un'altra parte, non e' detto che provi a vedere perche' non va.

Q: Come faccio a settare l'ambiente QT sulle macchine del dipartimento?
A: Dal command prompt di windows, far partire
vcvars32.bat (che si trova piu' o meno in \Program Files\Microsoft Visual Studio .NET\Vc7\bin\) e poi date i seguenti comandi:
 
SET PATH=%PATH%c:\qt\3.2.0Educational\bin
 SET QTDIR=c:\qt\3.2.0Educational
 SET QMAKESPEC=win32-msvc.net

Q: Ho sentito parlare di Compitino come funziona?
A: Test a risposte multiple. Vale 5 punti da sommare a quelli che si ottengono con la valutazione del progetto. Chi non fa o rifiuta il compitino, oltre alla discussione del progetto, deve sostenere un esame orale. Esempio di compitino

Q: Ho fatto il corso di CI l'anno scorso, che progetto devo fare?
A: Fino al primo appello (gennaio 2004) e' possibile consegnare progetti fatti secondo le specifiche del aa 02/03.  

Q: Come funziona il progetto quest'anno?
A: vedete la sezione Progetto

Q: Possiamo fare il progetto da soli?
A: NO, e' la dimensione di gruppo minima per un progetto e di due o tre studenti. Il max e' 4.

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: Come faccio per avere/installare XP .Net?
A: Dagli operatori del centro di calcolo.

Q: Sono del vecchio ordinamento, dovrei fare IUF+IUP ma non ci sono piu', che faccio?
A: CI + Real Time Media fanno 12 crediti e sono mutuabili come IUF+IUP 

Q: Posso usare un'ide diversa da .net (e.g. .net 2003, Visual Studio 6.0 Borland, Kdev ecc)?
A: Si' ma tenete conto che io distribuisco il src garantendo che compili su .net 2002.

Q: Non c'ero il primo giorno di lezione come faccio ad avere l'estensione dell'account per questo corso?
A: Mandatemi una mail, ascii, con soggetto "[CI] account" (senza virgolette :) contenente soltanto una riga con, nell'ordine, cognome nome matricola login.

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.

Il Progetto

Il progetto finale di Costruzione di Interfacce ha come oggetto la realizzazione di due applicazioni e una pagina web di descrizione del progetto. Le due applicazioni devono essere scritte in C++ e devono sfruttare OpenGL per il rendering tridimensionale e in pratica costituiscono un semplice gioco a livelli e l'editor necessario per costruire i livelli. 

Le due applicazioni quindi si integrano a vicenda, la prima applicazione, detta game editor, ha un'interfaccia più complessa, che deve essere realizzata in QT, ed ha come finalità la creazione di livelli che dovranno essere utilizzati dalla seconda applicazione detta game player e che e' un videogioco  dalla struttura ragionevolmente semplice in cui gli elementi del gioco sono 3D. Nota, non e' necessario che il gioco sia inerentemente tridimensionale, pacman in cui gli elementi sono 3d, ma che si svolge come sempre su di un piano va bene. Certo se il gioco e' inerentemente 3D non guasta. Puo' esservi richiesto esplicitamente se il gruppo e' di 3 o 4 persone.  

Normalmente capiterà che il game editor sia di gran lunga la più complessa delle due applicazioni, e deve condividere con il player il codice per visualizzare in opengl i livelli in una modalita preview. Ovviamente l'editor userà opengl per mostrare il documento durante l'editing e QT per le parti di interfaccia fuori dal contesto opengl. L'editor deve permettere di visualizzare e modificare l'area di gioco permettendo di aggiungere, selezionare, modificare, e cancellare elementi del gioco come ad esempio ostacoli o nemici. La selezione degli elementi deve avvenire per semplice click sugli oggetti in questione. I livelli cosi' costruiti devono poter essere salvati e ricaricati dall'editor. I file salvati devono essere in formato xml. Si puo' assumere che il piano di gioco sia discretizzato in una griglia di dimensione fissabile dall'utente e che gli elementi del gioco possano essere piazzati solo in posizioni discrete.

Il player sara' un’applicazione fullscreen basata su SDL che dopo qualche schermata di intro permette semplicemente di giocare in sequenza i livelli creati. 

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 con:

  • nomi dei componenti del gruppo,
  • brevi specifiche del progetto (basta una mezza paginetta txt/rtf/html),
  • molto approssimativamente, quando volete consegnare il progetto.

Il progetto viene consegnato masterizzato su CD che rimane al docente. Il CD contenente il progetto deve contenere un documento hmtl che descrive l'applicazione con: 

  • 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. Il progetto deve essere realizzato in gruppo (da due a quattro persone), ovviamente più il gruppo è numeroso più mi aspetto sia consistente il progetto.

Non mettete installatori automatici. Lo zip con il codice e' sufficiente.

Esempi di Progetto:

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. L'editor permette di costruire il labirinto e di piazzare i vari trabocchetti, e di configurare l'apparenza visiva (colore texture ecc) degli elementi del gioco.

Pacman-Like: Gioco di labirinto con palline da raccogliere e nemici che inseguono (con ben scarsa IA), vari bonus e varianti. Al solito l'editor permette di costruire il labirinto piazzare le palline da raccogliere, i bonus, le posizioni di partenza dei nemici, ecc

Pengo-Like: Gioco di labirinto del genere in cui il player deve allineare 3 o piu' blocchi senza incartarsi, per piu' dettagli guardatevi il gioco omonimo. Editor al solito.

 

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 Tuesday 09 December 2003alle 18.42