Programma realizzato per il corso di Geometria Computazionale

Image Terrain-Maker by Mazzocchi Santino  © 2004

Teo

ria

Introduzione

  
Il progetto “Image Terrain
-Maker e’ nato per simulare la creazione di superfici altimetriche in tre dimensioni partendo da immagini piane in scala di grigi. Il programma riceve come input d’ingresso un file di formato PGM (Portable Graymap) dal quale genera come output un modello tridimensionale del disegno in esso contenuto. Con il programma è possibile inoltre eseguire alcune operazioni di visualizzazione del terreno visualizzato, come zoom e rotazioni, oppure è possibile livellare la superficie innalzando le zone più basse o abbassando quelle più alte.
 

Funzionamento


Il processo di utilizzo del programma prevede più fasi successive molto semplici, che vanno dall'ideazione del terreno in due dimensioni, alla sua creazione, fino all'utilizzo delle varie funzionalità contenute nel progetto “Image Terrain-Maker.

I° passo: Creazione Immagine di Input

Inizialmente l'utente parte disegnando l'immagine attraverso un editor apposito; questa sarà solo l'inizio del processo che porterà, mediante varie operazioni eseguite da “Image Terrain-Maker, alla creazione del terreno 3D relativo. L'immagine, in scala di grigi, deve essere creata tenendo conto che diventerà un Height  Map caratterizzata da picchi di maggiore altezza nelle zone più chiare della figura, e di minore in corrispondenza delle parti scure.

II° passo : Acquisizione Immagine

In questa fase l'utente lancia il programma dando come parametro il file appena creato. Questo è una bitmap e perciò, ad ogni punto che compone l'immagine, è associata l'informazione corrispondente al suo colore. Tutti i valori presenti vengono memorizzati da “Image Terrain-Maker” per essere poi utilizzati nella fase di disegno. Rappresenteranno nel disegno finale l'altezza dei nodi della griglia quadrata schematizzata a fianco. 

III° passo - Visualizzazione

Con i dati acquisiti viene visualizzato il terreno in un mondo a tre dimensioni. Larghezza e profondità sono quelle dell'immagine di partenza che può essere considerata la base della superficie ed a queste viene ad aggiungersi l'altezza che estrude il terreno dal piano. La realizzazione avviene infatti disegnando effettivamente la griglia e sollevando in altezza i nodi di questa in base al colore che i pixel assumevano nell'immagine da cui si è costruito l'Height Map

IV° passo - Gestione Terreno

A questo punto il terreo è stato creato e l'utente può visualizzarlo sullo schermo. Inoltre è possibile effettuare in questa fase alcune operazioni di gestione dell'oggetto tridimensionale. Ad esempio è possibile cambiare il punto d'osservazione, ruotare sui tre assi cartesiani la superficie, scegliere i colori con cui visualizzarla, oppure effettuare un'operazione di smoothing
   

Creazione Immagine di Input


Il primo passaggio per la creazione del terreno virtuale non prevede l’utilizzo di “Image Terrain-Maker”, ma di un qualsiasi programma come Photoshop o Gimp che permetta di salvare il file prodotto in formato PGM. L’immagine da creare è una bitmap in scala di grigi, colorata con tutte le gradazioni che vanno dal bianco al nero, mentre la grandezza deve essere 50 pixel in larghezza e 50 pixel in altezza. Attraverso l’editor scelto l'utente può disegnare in due dimensioni il futuro terreno: dove vorrà avere una zona bassa dovrà colorare quella parte con colori scuri, mentre per sollevare il terreno saranno necessari colori chiari.

Formato PGM

L’utilizzo del particolare formato e’ dovuta alla comodità di avere immagini in scala di grigi. In esse infatti il colore viene memorizzato contrassegnando ogni pixel con un numero compreso tra 0-255. Lo 0 corrisponde ad un quadratino nero, mentre il numero 255 è associato ad uno bianco. La scala di grigi utilizza come massimo e minimo questi due valori e permette di scegliere sfumature intermedie. Il file che viene realizzato risulta essere composto da cinquanta righe e cinquanta colonne di valori, come il numero di pixel in larghezza ed in altezza dell’immagine.

Esempio file PGM

Esempio di file PGM di tipo "P2", di dimensioni 24x7 pixel, con il bianco memorizzato con valore 15:

P2       // inizio header
24 7  
15      //  fine header
0 0  0  0 0 0  0  0  0
0 0   0 11 11 11 11 0 0 15 15 15 15  0
0 0  0  0  0  7  0  0  0  0  0 11  0  0  0 0 0 15  0  0 15  0
0 3  0  0  0  7  7  7  0  0  0 11 11 11  0 0 0 15 15 15 15  0
0 0  0  0  0  7  0  0  0  0  0 11  0  0  0 0 0 15  0  0  0  0
0 0  0  0  0  0  7  7  7  7  0  0 11 11 11 11 0 0 15  0  0  0  0

0 0  0  0  0  0  0  0  0  0  0  0  0  0  0 0 0  0  0  0  0  0

Acquisizione Immagine 


Il passo successivo prevede che “Image Terrain
-Maker” riceva in ingresso l'immagine generata in precedenza. Questa operazione può essere eseguita trascinando il file PGM sull'eseguibile, o in shell facendo seguire al nome del programma quello dell'immagine:" terreno nomefile.pgm ".  A questo punto il programma si occupa di acquisire in memoria i 2500 valori numerici contenuti nel file (50 righe x 50 colonne) ad esclusione di quelli dell'intestazione. Durante la scansione del file vengono letti i valori cromatici di ogni singolo punto, e riversati nell'ordine in cui appaiono in un array mono-dimensionale. 
I primi cinquanta numeri corrisponderanno ai diversi colori dei punti della prima riga, la seconda cinquantina sarà la seconda fila di pixel dell'immagine e così via.
I valori contenuti nell'array verranno utilizzati come i vertici di una griglia, la loro posizione ( x, z) sarà quella che assumono nel file di partenza, mentre la y verrà determinata dal numero, ossia dal colore di partenza.
 

Visualizzazione


Esaurita la precedente procedura, viene realizzato il disegno della superficie altimetrica all'interno di un mondo tridimensionale.
Quest'ultimo è caratterizzato da tre assi cartesiani, larghezza x, altezza y, profondità z. Nell'origine viene disegnato il terreno, mentre il punto di vista dell'osservatore è a 45 gradi rispetto ai tre assi. 
L'Height Map viene creata utilizzando un procedimento di tassellazione che rende il quadrato dell'immagine di partenza una maglia di triangoli connessi tra loro. 

Tassellazione

Ogni vertice dei triangoli  di cui è composta la griglia è caratterizzato da tre coordinate. X e z sono fissate in modo da rendere la griglia regolare mantenendo fissi i punti rispetto ai due assi; y,  l'altezza, è invece generata all'interno dell'algoritmo, in base al colore che il punto assumeva nell'immagine di partenza. Durante la creazione dei vertici del triangolo è associato ad ogni vertice anche un colore, dal verde al bianco, che tiene conto della posizione del punto sull'asse Y. Come in figura accanto è possibile che vertici dello stesso poligono siano su altezze diverse e abbiano dunque anche colori diversi. In questo caso la superficie del triangolo sarà colorata seguendo il metodo dell'interpolazione dei diversi colori posti ai vertici. 

Risultato Finale

I triangoli vengono così disegnati in successione, facendo variare solamente l'altezza dei vertici. Complessivamente il risultato è una superficie quadrata suddivisa in triangoli disposti con inclinazioni diverse a seconda della colorazione dell'immagine di partenza. L'oggetto creato può essere visualizzato in due modalità, attivando il reticolato (wireframe) compaiono sullo schermo solamente i tre lati dei triangoli, disattivandolo viene disegnata tutta l'area coperta dai poligoni. Questa superficie è colorata anch'essa ma secondo un criterio diverso rispetto al file d'origine. Nei punti più bassi i triangoli che compongono la griglia sono verdi chiari, salendo in altezza il verde diviene più scuro fino a diventare marrone, ancora sopra trova posto il colore grigio ed infine nei punti più alti il bianco. Se l'utente lo desidera può anche assegnare al terreno 3D un colore in scala di grigi come nel file di partenza. Questa possibilità è utile soprattutto in relazione alla possibilità di ruotare il terreno e avvicinare o allontanare l'osservatore. Infatti portandosi al di sopra della superficie, e diminuendo le dimensioni della stessa, attraverso lo zoom, è possibile valutare come il tutto il processo attuato da “Image Terrain-Maker” non abbia provocato una distorsione della figura di partenza, ma anzi questa appai immutata.
 

Gestione terreno


Le funzionalità disponibili nel progetto “Image Terrain
-Maker”, in fase di visualizzazione del terreno, sono molteplici e comprendono la possibilità di ruotare quanto realizzato, modificarne i colori, sia della superficie, sia dello sfondo, scegliere il disegno della griglia più adeguato o eseguire zoom dell'inquadratura. Queste funzioni sono descritte approfonditamente nella pagina "interfaccia", mentre qui verrà descritta l'ultima possibile interazione con il modello 3D: il livellamento (smoothing).
Qualora il terreno presentasse delle zone particolarmente elevate adiacenti a zone di minore altezza è possibile per l'utente avvicinarle riducendo le dimensioni dei triangoli che le uniscono. 
Il funzionamento dell'algoritmo prevede che l'utente scelga un valore, definito di salto, all'interno di una scala che va da 10 a 250. In base al numero selezionato il programma valuterà in quali casi la griglia presenta adiacenti nodi la cui differenza di altezza è maggiore o uguale a tale cifra. Questa verifica avviene controllando per ogni vertice la sua altezza e paragonandola a quella degli 8 vertici adiacenti. In caso vi sia uno di questi salti troppo pronunciati tra il vertice ed uno di quelli che lo attorniano il programma incrementa la coordinata y dei vertici alla base mantenendo inalterato quello centrale più alto. Nel caso l'utente lo voglia può decidere invece di abbassare il punto centrale scegliendo che il livellamento proceda verso il basso premendo appunto nel menù livellamento->alto/basso. L'operazione viene eseguita sull'array iniziando da quello di partenza e modificandolo come descritto e per questo motivo può essere ripetuta più volte di seguito sul terreno via via livellato.