Progetto di Interazione Uomo-Macchina: Grafica

A.A. 2000-1



Finalita'

Sviluppare un sistema per la visualizzazione di modelli di terreno.

I terreni da visualizzare potranno essere dati o come griglia regolare di quote, oppure come triangolazione con valori di quota associati ai vertici.

Ai fini della visualizzazione, le griglie sono ridotte a triangolazioni suddividendo ogni maglia rettangolare in due triangoli. Dunque, si tratta di visualizzare triangolazioni.

Il sistema deve supportare:

Specifica dei file di input

Terreni a griglia

Esempi: monte.grd, discesa.grd.

Terreni triangolati

Esempi: monte.tri

Note

In entrambi i formati di file, a separare un numero dal successivo possono esserci spazi, tabulazioni, ritorni a capo in numero arbitrario ed anche mischiati.

I due tipi di file si distinguono dall'estensione del loro nome, che e'

Per le griglie, il dominio e' un rettangolo. Per le triangolazioni, il dominio e' un poligono arbitrario, che e' garantito essere semplicemente connesso (senza buchi).

Modalita' di vista

Il sistema fornisce la possibilita' all'utente di agire sui parametri di vista Per visione "da dentro", esistono due modi di soddisfare la specifica di cui sopra:
  1. Punto di vista che "cammina" sul terreno.
    L'utente decide se vuole andare avanti / indietro, se vuole girare a destra / a sinistra.
    Il sistema esegue questi spostamenti mantenendo costante l'altezza del punto di vista sul terreno (il che non significa costante in assoluto: dipende dall'altezza del terreno nel punto in cui mi trovo)
    L'altezza del punto di vista sul terreno puo' essere cambiata dall'utente (come se l'utente decidesse di abbassarsi o di mettere i trampoli mentre cammina).
  2. Punto di vista che "vola" sul terreno.
    In ogni momento il punto di vista ha una direzione di moto, la direzione dell'aereo.
    L'utente decide se vuole ruotare verso l'alto / verso il basso la direzione di moto, se vuole girare a destra / a sinistra, se vuole inclinare l'aereo a destra / a sinistra.
    Il sistema deve arrestare il moto se capita che l'utente vada a picchiare contro la superficie del terreno Potete scegliere uno a piacere dei due modi.

    Riempimento delle facce

    Deve essere possibile passare interattivamente da una modalita' di riempimento ad un'altra.

    Colorazione

    Il sistema fornisce strumenti all'utente per scegliere i parametri necessari a stabilire la colorazione nelle due modalita'. Deve essere possibile passare da una modalita' all'altra senza perdere la configurazione del colore nella modalita' che si e' (temporaneamente) abbandonata.

    Inoltre l'utente deve poter scegliere il colore di sfondo.

    Fattore di scala

    Molto spesso nei file le quote z sono espresse con un'unita' di misura diversa da quella usata per le due coordinate orizzontali x,y, per cui una visualizzazione senza scalatura risulterebbe non soddisfacente.

    Il sistema prevede un fattore che controlla la scalatura delle z in rapporto alle x ed y.
    Inizialmente tale fattore viene stabilito autonomamente dal sistema nel modo piu' soddisfacente possibile (per es. tale che l'ampiezza dell'intervallo coperto sulle z dal terreno sia confrontabile come ordine di grandezza con l'ampiezza dell'intervallo coperto su x ed y).
    Il sistema fornisce poi strumenti all'utente per modificare tale fattore di scala.

    Altro

    Il sistema dovra' fornire una o piu' funzioni aggiuntive a scelta degli studenti che lo realizzano. Elenco qui una serie di idee.

    Curve di livello

    Visualizzazione di curve di livello. Considerare una serie di quote, calcolare i segmenti intersezione fra i triangoli del terreno ed i piani orizzontali alle quote stabilite, e visualizzare tali segmenti

    Interrogazioni spaziali

    Data un'entita' (punto, spezzata poligonale) determinare i triangoli intersecati e restituire l'altezza del terreno in corrispondenza del punto o lungo la linea.

    Modifica del terreno

    Permettere all'utente la selezione di vertici o insiemi di vertici del terreno ed aumentare / diminuire la quota di tali vertici deformando conseguentemente il terreno.
    Si puo' anche pensare di propagare la deformazione in modo graduale dal vertice esplicitamente modificato ai suoi vertici vicini fino ad una certa distanza topologica.
    Si puo' anche pensare di utilizzare una spezzata per indicare i vertici le cui quote devono essere modificate, in tal modo per es. e' possibile scavare una valle nel terreno o alzare una catena montuosa

    Gestione dei file

    L'utente deve poter Nel caso in cui si preveda di poter modificare il terreno, deve essere data anche la possibilita' di salvare il terreno modificato sullo stesso file da cui era stato caricato oppure su un file nuovo.

    Strutture dati

    La struttura dati usata per triangolazioni dovra' essere tale da consentire la visita dei triangoli per adiacenze.

    Questo perche' in modalita' di visione "da dentro" e' necessario mantenere traccia del triangolo in cui cade il punto di vista al fine di confrontare la quota del triangolo con quella del punto di vista ed accertarsi che il punto di vista sia sopra al triangolo.

    Il modo piu' facile per mantenere il triangolo corrente e', ad ogni movimento su x,y, controllare se si attraversa un lato sconfinando in uno dei tre triangoli adiacenti.

    La stessa struttura si puo' usare per la triangolazione derivata da una griglia.

    Oppure, la struttura dati usata per griglie potra' essere una semplice matrice rettangolare di quote.
    Sia i triangoli che le loro relazioni di adiacenza si possono ottenere mediante manipolazione di indici. Per ogni coppia di indici i,j (0> i> M, e 0> j> N) ci sono due triangoli in una (fissata a piacere) delle due configurazioni:

    [i-1,j-1] --------- [i,j-1]         [i-1,j-1] --------- [i,j-1] 
             |       / |                         | \       | 
             |     /   |                         |   \     |
             |   /     |                         |     \   |
             | /       |                         |       \ |
      [i-1,j] --------- [i,j]             [i-1,j] --------- [i,j]