Corso di
Interazione Uomo-Macchina: Interfacce Grafiche
Esercitazione di laboratorio
Data di consegna: 29 maggio 1998
Modalita' di lavoro: a gruppi.
I gruppi possono non essere gli stessi delle esercitazioni guidate
(sono permesse suddivisioni, migrazioni), i gruppi non
possono essere composti da piu' di tre persone), raccomando di
segnalarmi le variazioni.
E' possibile farla a casa, anche per conto proprio (non in gruppo),
anche in questo caso segnalatemi la cosa.
Lavoro da svolgere
Realizzare un'interfaccia grafica per un'applicazione che visualizza e
manipola files contenenti scene formate da oggetti solidi in 3D.
Ogni file contiene una scena OpenGL composta da uno o piu'
oggetti solidi, ognuno specificato da:
- un punto di aggancio
- una lista di poligoni, ognuno composto da una normale e
da una lista di vertici (almeno tre).
Il numero di oggetti contenuti e' indicato in testa al file.
I vertici di un oggetto sono definiti in un
sistema di coordinate (coordinate di modellazione) locale
all'oggetto in questione.
Il punto di aggancio stabilisce dove e' collocata l'origine del
sistema di riferimento locale rispetto al sistema di coordinate
globale dell'intera scena.
La sintassi precisa del file e' data dalla seguente grammatica:
- FILE ::= NATURAL OBJECT | NATURAL OBJECT FILE
- OBJECT ::= begin_object anchor_point COORDS POLIG_LIST end_object
- POLIG_LIST::= POLIG | POLIG POLIG_LIST
- POLIG ::= NORMAL COORD_LIST
- NORMAL ::= COORDS
- COORD_LIST ::= COORDS | COORDS COORD_LIST
- COORDS ::= REAL REAL REAL
- NATURAL ::= sintassi usuale per numeri naturali
- REAL ::= sintassi usuale per numeri reali
I separatori nel file possono essere spazi bianchi, tabulazioni,
ritorni a capo, in numero qualsiasi e anche mischiati fra loro.
L'applicazione permette di:
-
caricare la scena contenuta in un file e visualizzarla,
eventualmente rimpiazzando una scena gia' visualizzata
(per es. caricata precedentemente da un altro file)
-
compiere operazioni geometriche e grafiche
sugli oggetti della scena visualizzata
(ved. dopo)
-
compiere operazioni grafiche sull'intera scena (ved. dopo)
-
salvare su file la scena correntemente visualizzata
Operazioni disponibili sugli oggetti:
-
traslare un oggetto all'interno della scena, muovendolo
avanti o indietro in una delle 3 direzioni spaziali
-
cambiare il colore con cui e' visualizzato un oggetto
-
cambiare la modalita' di visualizzazione di un oggetto da
wireframe a solid e viceversa
-
visualizzare il punto di aggancio di un oggetto (il punto di aggancio
potrebbe cadere dentro l'oggetto, per cui non e' detto che quando
e' visualizzato sia effettivamente visibile se l'oggetto e'
reso in modalita' solid; se invece e' reso in modalita' wireframe
allora il punto di aggancio e' sicuramente visibile)
Note:
Il file contiene solo la geometria di un oggetto.
La posizione del punto di aggancio per un oggetto
e' contenuta nel file.
Proprieta' grafiche come la modalita' di visualizzazione
e il colore non sono contenute nel file:
quando un oggetto viene
letto, gli vengono attribuiti dei valori iniziali di default.
Per poter compiere operazioni su un singolo oggetto, occorre
un meccanismo che permetta all'utente di selezionare un oggetto.
Il modo piu' semplice e' dare ad ogni oggetto un "nome" e
permettere all'utente di selezionare il nome dell'oggetto su cui
vuole compiere le operazioni.
E' importantissimo dare all'utente un feedback che gli mostri
visivamente quale oggetto ha selezionato (per es. evidenziandolo
con un colore piu' intenso, visualizzandone il bounding box, etc.).
Anche per l'operazione di traslazione del punto di ancoraggio, e'
importante che l'utente abbia un feedback che gli mostri
che cosa sta per fare (per es. visualizzare il vettore di
traslazione applicato nel punto).
Operazioni grafiche sulla scena:
-
muovere il punto di vista facendolo "orbitare" attorno alla scena
per vedere la scena da un'angolazione diversa (sempre in 3D)
-
visualizzare la proiezione della scena su ognuno dei tre
piani coordinati
La scena deve essere inizialmente visualizzata in 3D con
trasformazioni di vista e proiezione tali che la scena
sia completamente visibile e non troppo "lontana"
rispetto all'osservatore.
Poiche' e' prevista la possibilita' di visualizzare oggetti
in modalita' solid, dovranno anche usate una o piu'
luci per l'illuminazione.
Materiale fornito
Vengono forniti alcuni file di input come esempio,
e uno "scheletro" di programma, che implementa gia' le parti
relative a:
-
lettura di un file nel formato indicato, creazione delle primitive OpenGL
corrispondenti ad ogni oggetto, e loro visualizzazione
-
una rudimentale illuminazione della scena
-
rotazione del punto di vista attorno alla scena visualizzata
Il sorgente e' start.c,
il makefile e' il solito.
Trovate qui
la spiegazione di come e' organizzato il codice.
Raccomandazioni
Questo e' un progetto di interfacce grafiche.
Pertanto, sara' tenuto conto non solo del fatto che tutte le
funzioni richieste siano presenti nell'interfaccia
sviluppata, ma anche e di quanto facile e gradevole
risulta l'uso dell'interfaccia stessa per l'utente.
Materiale da consegnare
-
Un dischetto (in formato DOS) contenente (in formato Linux,
cioe' copiato con mcopy SENZA l'opzione -t)
l'eseguibile, i sorgenti e il makefile.
-
Se lo si ritiene necessario, brevissime
istruzioni per l'uso dell'interfaccia
(su carta o sul dischetto stesso in formato ASCII).