Corso di
Interazione Uomo-Macchina: Interfacce Grafiche
Esercitazione AUTUNNALE di laboratorio
Data di consegna: 7 ottobre 1998
Lavoro da svolgere
Realizzare un'interfaccia grafica per un'applicazione che visualizza e
manipola files contenenti istogrammi tridimensionali.
Un istogramma tridimensionale e' un insieme di prismi retti a base
poligonale.
Le basi inferiori dei prismi giacciono tutte sul piano z=0, e sono tra
loro disgiunte (o al piu' si toccano lungo i contorni).
Ciascun prisma ha una certa altezza e un certo colore.
Ogni file contiene un istogramma 3D, composto da uno o piu' prismi,
ognuno specificato da:
- la sequenza di punti sul piano x-y, definente il contorno
della base, ordinata in senso antiorario
- l'altezza del prisma
- il suo colore, dato come terna di valori RGB
Il numero di prismi contenuti e' indicato in testa al file.
La sintassi precisa del file e' data dalla seguente grammatica:
- FILE ::= NATURAL PRISM | NATURAL PRISM FILE
- PRISM ::= begin_prism BASE HEIGHT COLOR end_prism
- BASE ::= NATURAL POINT_LIST
- POINT_LIST::= REAL REAL | REAL REAL POINT_LIST
- HEIGHT ::= NATURAL
- COLOR ::= 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 l'istogramma contenuto in un file e visualizzarlo,
eventualmente rimpiazzando una istogramma gia' visualizzato
(per es. caricato precedentemente da un altro file)
-
compiere operazioni geometriche e grafiche
sui prismi dell'istogramma visualizzato
(ved. dopo)
-
compiere operazioni grafiche sull'intera scena (ved. dopo)
Operazioni disponibili sui prismi:
-
scalare il prisma sulla z, cioe' variarne l'altezza (allungarlo o
accorciarlo, tenendolo sembre "attaccato" alla sua base sul piano
x-y)
-
scalare il prisma su x ed y solidalmente, cioe' variare le
dimensioni della base (restringerla o espanderla attorno al suo
baricentro)
-
cambiare il colore con cui e' visualizzato il prisma
-
cambiare la modalita' di visualizzazione di un prisma da
solid (flat shading) a wireframe, e viceversa
Note:
Inizialmente, tutti i prismi saranno visualizzati per default in
modalita' solid (flat shading).
Per poter compiere operazioni su un singolo prisma, occorre
un meccanismo che permetta all'utente di selezionare un prisma.
Il modo piu' semplice e' dare ad ogni prisma un "nome" e
permettere all'utente di selezionare il nome del prisma su cui
vuole compiere le operazioni.
E' importantissimo dare all'utente un feedback che gli mostri
visivamente quale prisma ha selezionato (per es. evidenziandolo
con un colore piu' intenso, marcandone il contorno, facendolo
lampeggiare, o altro espediente).
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 sul piano x-y (praticamente,
vedere solo i poligoni di base dei prismi)
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 prisma, e loro visualizzazione
-
una rudimentale illuminazione della scena
-
rotazione del punto di vista attorno alla scena visualizzata
Il sorgente e' startbis.c,
il makefile e' il solito.
Trovate qui
la spiegazione di come e' organizzato il codice.
I files di input finora disponibili sono:
scala.ist,
torta.ist.
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 (formattato DOS) contenente (in formato Linux, ovvero
copiato con mcopy SENZA l'opzione "-t") l'eseguibile, i sorgenti e
il makefile (se quest'ultimo e' diverso da quello fornito).
-
SOLO se lo si ritiene necessario, brevissime istruzioni per l'uso
dell'interfaccia (su carta o sul dischetto stesso in formato ASCII).