Secondo progetto di Grafica Interattiva A.A. 2003-4
Grafica tridimensionale
Scopo
Realizzare un programma per la visualizzazione di funzioni
bivariate.
Descrizione generale
Una funzione bivariata e' caratterizzata da un dominio rettangolare
sul piano xy e da un meccanismo per attribuire ad ogni punto (x,y)
appartenente a tale dominio un valore di quota z.
Consideriamo funzioni in cui la quota z e' attribuita in base a
una formula matematica e funzioni in cui la quota z e' attribuita
per interpolazione in base a dati di campionamento
(ved. esercitazioni 5 e 6).
Il programma permette di inserire nell'ambiente di lavoro piu' funzioni,
mostra i grafici delle funzioni presenti dentro al loro dominio, e
permette di eseguire alcune operazioni.
La visualizzazione avviene sia in pianta che in visione prospettica,
con la possibilita', nella vista prospettica,
di muovere il punto di vista attorno alla scena,
avvicinarsi e allontanarsi.
La vista in pianta invece consente solo zoom e pan e mostra la posizione
del punto di vista usato nella vista prospettica.
Inoltre il programma permette di gestire l'illuminazione.
Di ogni grafico e' possibile:
- scegliere il colore (cioe' le proprieta' di materiale)
- scegliere se visualizzarlo a facce piene o wireframe o soli vertici
- cambiare la granularita' della griglia usata per discretizzare la
funzione
- mostrare o nascondere la griglia (sul piano xy)
- variare il fattore di scala delle z rispetto alle xy
- traslare il grafico secondo un vettore parallelo al piano xy
- ruotare il grafico attorno ad un asse parallelo all'asse z
L'utente decide a quale grafico
applicare le operazioni selezionandolo col click del mouse oppure
scegliendolo da una tabella.
Specifiche dettagliate
Organizzazione generale
Al piu' 5 funzioni possono essere presenti contemporaneamente, e possono
essere memorizzate in un array (ved. suggerimenti).
Il grafico di una funzione presente
puo' essere anche temporaneamente nascosto
(senza con questo eliminare la sua funzione).
La finestra e' divisa in quattro sotto-aree:
- area vista in pianta: mostra la vista in pianta della scena
- area vista prospettica: mostra la vista prospettica della scena
- area comandi: simula una serie di bottoni e menu'
- area messaggi: mostra informazioni e/o istruzioni per l'utente
Area vista in pianta e area vista prospettica
Queste due aree mostrano i grafici delle funzioni
correntemente presenti (tranne quelli che sono stati temporaneamente
nascosti) e, se attivati, gli assi cartesiani.
In ciascuna delle due aree viene sempre mantenuta la aspect ratio
della scena, quando l'utente cambia le dimensioni della finestra.
Ciascun grafico puo' essere mostrato in
tre versioni: punti, linee oppure facce piene (ved. esercitazione 5).
A richiesta puo' essere mostrato il pavimento di un grafico sul piano xy,
disegnato a quadretti (ved. esercitazione 5 - terza tappa).
Inoltre possono essere mostrati a richiesta gli assi cartesiani.
I grafici sono illuminati da
due sorgenti luminose (ved. esercitazione 7 - tappa di compito):
- una fissa rispetto all'osservatore
- una fissa rispetto alla scena
Nella vista in pianta e' mostrata la posizione del punto di vista usato
nella vista prospettica (ved. esercitazione 6 - prima tappa),
ed e' mostrata la posizione della sorgente luminosa
fissa rispetto alla scena (ma solo se rientra nel volume di vista).
Il colore di ciascun grafico e' definito da due materiali: uno per
il "sopra" e uno per il "sotto".
In versione punti e linee si usa uno solo dei due colori (scegliete
voi quale), in versione facce piene si usano entrambi.
Assi e pavimenti emettono luce propria indipendentemente delle sorgenti
luminose (ved. esercitazione 7 - prima tappa).
Durante l'interazione puo' essere selezionato un solo grafico.
Il grafico selezionato e' evidenziato in modo opportuno.
In ogni momento
la scena visualizzata nelle due viste in pianta e prospettica deve essere
la stessa: stessi grafici, stesse cose mostrate,
con stessi attributi, stessa illuminazione, ecc.
Tra le due viste cambiano solo le trasformazioni di proiezione.
Interazione
In qualsiasi area si trovi il mouse, la pressione dei tasti "q", "Q" e del
tasto ESC provoca la terminazione del programma.
In tutte e due le viste in pianta e prospettica:
- il click del mouse su un grafico seleziona il grafico
(e disseleziona il grafico precedentemente selezionato, se esiste)
- il click del mouse non su un grafico provoca la disselezione
- la pressione del tasto "+" o "-",
quando c'e' un grafico selezionato, ingrandisce o rimpicciolisce
tale grafico
- la pressione del tasto "+" o "-", quando nessun
grafico e' selezionato, ingrandisce o rimpicciolisce l'intera scena
- i tasti freccia su e giu' traslano il grafico selezionato
(se esiste) parallelamente all'asse z, rispettivamente
verso l'alto e verso il basso
- i tasti "x", "X", "y", "Y", "z", "Z" muovono la sorgente luminosa
fissa rispetto alla scena di un certo ammontare lungo
l'asse x, y oppure z (lettera maiuscola per movimento nel
verso positivo dell'asse, minuscola per verso negativo)
Solo nella vista prospettica:
- [*] muovere il mouse a bottone premuto ruota il punto di vista
attorno alla scena in base a due angoli
(ved. esercitazione 5 - terza tappa):
- se il moto del mouse e' orizzontale, attorno all'asse perpendicolare
al pavimento della scena
- se il moto del mouse e' verticale, attorno ad un asse
orizzontale rispetto alla finestra di visualizzazione sullo schermo
- [*] i tasti freccia sinistra e destra provocano l'avvicinamento e
l'allontanamento del punto di vista rispetto al centro della scena
Solo nella vista in pianta:
- muovere il mouse a bottone premuto trasla il grafico
selezionato (se esiste) nella direzione del movimento
del mouse (sul piano xy).
- il tasto "r" o "R" ruota il grafico selezionato (se esiste)
attorno ad un asse parallelo
all'asse z e passante per il baricentro del suo dominio
In ogni caso (tranne quelli segnati con [*]) gli effetti dell'azione
eseguita in una vista si ripercuotono anche sull'altra vista.
Area comandi
L'area comandi contiene
sotto-aree che si comportano come bottoni (su di esse e' attiva una
mouse callback) e sotto-aree che si comportano
come menu' (su di esse e' attivo un menu' pop-up). Queste sono:
1. Area file
su cui e' attivo un menu' pop-up che permette di:
- Inserire il grafico di una nuova funzione:
consente di scegliere tra un insieme prefissato di funzioni
analitiche oppure di caricare una funzione campionata da file.
Nel secondo caso chiede all'utente di digitare il nome del file
- eliminare il grafico selezionato (se esiste)
- uscire dal programma
2. Area seleziona
su cui e' attivo un menu' pop-up che permette di
selezionare un grafico scegliendone il numero. Si hanno al piu' 5
opzioni per gli al piu' 5 grafici presenti.
I numeri corrispondenti a posti correntemente vuoti devono
o non essere mostrati nel menu', o in ogni caso non produrre danno
quando selezionati (provocare un messaggio d'errore in area messaggi
ma non il crash del programma).
La selezione per numero (a differenza di quella per click) permette
di selezionare anche grafici temporaneamente nascosti: in questo
caso il grafico torna ad essere visibile non appena viene selezionato.
3. Area attributi
su cui e' attivo un menu' pop-up per gestire
gli attributi del grafico correntemente selezionato (se esiste):
- impostare il point size
- impostare la line width
- impostare la modalita' di disegno del grafico:
punti, linee, pieno, oppure nulla (con questo intendendo che il grafico
viene temporaneamente nascosto)
- impostare il materiale "sopra" (riflessione ambiente e diffusa)
- impostare il materiale "sotto" (riflessione ambiente e diffusa)
Per point size e line width si puo' proporre
un insieme prefissato di valori oppure richiedere
un valore all'utente da tastiera.
Per le proprieta' di materiale si puo' proporre
un insieme prefissato di colori oppure richiedere
un colore all'utente da tastiera (ved. suggerimenti).
4. Area griglia
su cui e' attivo un menu' pop-up per gestire la
griglia usata per produrre il grafico correntemente selezionato (se esiste)
a partire dalla sua funzione:
- decidere se mostrare o nascondere la griglia
(il "pavimento" del grafico)
- impostare il numero di righe e colonne
- impostare il fattore di scala delle coordinate
z rispetto alle x ed y
Per numero di righe e colonne e fattore di scala
si puo' proporre un insieme di valori
prefissati oppure chiedere di digitare un valore.
5. Area assi
che si comporta come un bottone e permette di mostrare
o nascondere gli assi cartesiani.
6. Area luci
su cui e' attivo un menu' pop-up che permette di:
- attivare / disattivare la sorgente luminosa fissa
rispetto all'osservatore
- impostare le proprieta' della luce emessa dalla sorgente
fissa rispetto all'osservatore (ambiente e diffusa)
- attivare / disattivare la sorgente luminosa fissa rispetto
alla scena
- impostare le proprieta' della luce emessa dalla sorgente
fissa rispetto alla scena (ambiente e diffusa)
Anche qui per le proprieta' della luce si puo' far scegliere fra
un insieme di colori prefissato o chiedere di digitare un colore.
Le varie sotto-aree sono decorate con icone, oltre a portare il titolo
(stringa) corrispondente.
Tutti i cambiamenti vengono applicati simultaneamente ad entrambe le viste
in pianta e prospettica.
Area messaggi
L'area messaggi informa sull'ultima operazione eseguita:
-
dopo aver inserito o selezionato una funzione mostra: se la funzione e'
analitica, la sua espressione; se la funzione e' campionata,
il nome del file da cui e' stata caricata; in ogni caso,
gli estremi minimi e massimi delle sue x, y e z.
-
dopo aver selezionato un numero di funzione che non esiste (se nel menu'
selezione abbiamo lasciato sempre tutti e 5 i numeri), mostra un
messaggio di errore
-
nel chiedere il nuovo valore per un attributo,
mostra prima il valore corrente dell'attributo
(per es. se voglio un point size piu' grande mi e' comodo
sapere quanto vale quello corrente), e dopo
mostra il nuovo valore impostato
- eccetera...
Inoltre fornisce "l'eco" di quanto l'utente digita da tastiera:
- il nome del file da cui caricare una nuova funzione campionata
- il nuovo valore di point size, line width
- eccetera...
Vedere anche
Suggerimenti
Informazioni sulla consegna (scadenza,
materiale da consegnare)