Dark Maps
![]() |
![]() |
|
![]() |
English - English | ![]() |
Dopo mesi di lungo silenzio... ho deciso di presentare un nuovo articolo, che spiega e riassume il lavoro svolto nelle ultime 3 settimane. Dopo anni di accantonamento di Java ho ripreso in mano le briglie della OOP, in particolare di Java, linguaggio tanto criticato ma tanto utile e semplice. L'idea che ho colto (sulla poltroncina del regionale delle 17:38) era quella di creare un programma che dividesse un'immagine in tanti blocchi quadrati e che assegnasse ad ogni blocco un elemento tridimensionale, ad esempio un cilindro, in modo da rendere l'immagine una sorta di mappa 3D, in cui al posto dei pixel vi fossero dei cilindri piu' o meno alti, a seconda della luminosita' media del blocco di pixel su cui si trova il cilindro. Per semplificare il concetto, poniamo che io abbia una foto presa da satellite dove le zone piu' chiare rappresentano alture, mentre laddove e' piu' scuro, il terreno e' piu' basso. Passando un'immagine del genere al mio programma avremmo una mappa tridimensionale del suddetto terreno. Certo, nulla di nuovo, sistemi simili sono utilizzati per realizzare mappe 3D dei pianeti. Ma l'idea di mappare immagini come fotografie di visi o quant'altro mi fosse venuto in mente era troppo forte, in piu' il 3D rappresentava per me una nuova frontiera, un ambiente ancora inesplorato. Inoltriamoci nei dettagli. Il flusso del programma e' abbastanza semplice. Cominciamo con qualche dato d'esempio. Diciamo che vogliamo mappare un'immagine di 300x400 pixel, utilizziamo 20 pixel di dettaglio. Cosa significa? Significa che l'immagine verra' divisa in tanti quadrati di 20x20 pixel. Esattamente avremo 15 quadrati in altezza e 20 in larghezza (300/20 = 15 e 400/20 = 20). Per ogni quadrato eseguiamo le seguenti operazioni:
Se ripetiamo tutte queste azioni per ogni quadrato dell'immagine, otterremo una mappa tridimensionale la cui utilita' e' tutta da discutere, ma l'effetto visivo sara' certamente innegabile. Per rendere piu' soddisfacente tale effetto ho inserito alcune funzioni, tra cui la possibilita' di accendere e spegnere una luce, scegliere il colore della luce, settare le impostazioni del materiali con cui sono fatti i cilindri, usare il mouse per ruotare, spostare o zoomare la mappa 3D, una preview, cambiare la scala dei colori, settare il dettaglio, settare il rapporto luminosita'/altezza. Il programma e' scritto in java, per cui se volete utilizzare i binari o compilare i sorgenti avrete bisogno del jre e il j3d scaricabili gratuitamente su http://java.sun.com. |
||