Approfondimenti
di Michael J. Hammel traduzione di Antonio Cartelli



VRWave 0.9

Qualche tempo fa un lettore, un certo Paulo, mi ha inviato un'e-mail chiedendomi se avessi già dato un'occhiata a VRWave. Si tratta di un browser VRML 2.0 reso disponibile dall'Istituto per l'Elaborazione delle Informazioni e per i Nuovi Media Informatici (IICM) del Politecnico dell'Università di Graz in Austria. Il software è accessibile gratuitamente a solo scopo personale ed include il codice sorgente. La versione corrente, la 0.9, comprende dei sorgenti redatti in Java, anche se tutta la parte del codice dedicata alla rappresentazione è ancora redatta in C mediante l'uso di OpenGL o Mesa.

Andando a vedere tra le cose da fare che avevo in agenda per la Musa della Grafica, mi è parso che fosse giunto il momento di dare un'occhiata a VRWave. Mi sono prefissato, come obiettivo minimo, di riuscire a far funzionare il software e nel caso in cui fosse andato tutto bene di cimentarmi con lo scrivere qualcosa di intelligente sul codice sorgente oltre che costruire ambienti tridimensionali. Mi sono avventurato sulla Rete ed ho scaricato una copia del pacchetto da un sito americano mirror (copia) della Home Page di VRWave (http://www.iicm.edu/vrwave). Ho potuto subito notare che c'erano entrambe le distribuzioni: quella con i sorgenti e quella con gli eseguibili; per quanto riguarda questi ultimi, poi, ho potuto constatare la disponibilità di materiale per diverse versioni di Unix, incluso ovviamente, quello per Linux 2.0. Delle distribuzioni con gli eseguibili esistono attualmente due versioni: una che poggia interamente su Java 1.1.3 ed una versione Mesa che utilizza Java 1.0.2; queste sembrano essere al momento le librerie specifiche, per il tipo di piattaforma utilizzato, richieste da VRWave. Nel dubbio ho scaricato entrambe le versioni, insieme ad un file Common di tipo tar zippato (g-zippato) che deve accompagnare ogni versione binaria che ci si vada a procurare. Va notato che la versione Mesa non è stata compilata tenendo conto di tutti i drive hardware accelerati disponibili per Mesa, per cui chi volesse utilizzare qualcuno di questi drive deve ricompilare il sorgente con il pacchetto Mesa ricompilato in maniera opportuna con i drive che interessano. Per di più il codice Mesa viene linkato staticamente alle librerie specifiche di piattaforma per cui non si ha alcuna necessità di ulteriori librerie o file all'infuori di quelli contenuti nel file Common citato e nel file di tipo tar specifico per il tipo di piattaforma utilizzata.

Le istruzioni che accompagnano il software dicono di scompattare innanzitutto il file Common, quindi di cambiare area entrando in vrwave-0.9 e provvedere a creare e scompattare i file specifici del tipo di piattaforma. Quando ho provato ad effettuare l'installazione la prima volta non ho eseguito le operazioni indicate nell'ordine corretto per cui mi sono confuso ed ho dovuto ripetere tutto da capo, questa volta seguendo le istruzioni. È proprio vero - la gente non legge mai le direttive di installazione. Le istruzioni contenute nel file INSTALLATION, che servono a far sì che VRWave funzioni, sono abbastanza complete per cui non starò a ripeterle qui. Chi vorrà seguire le mie orme è bene che legga questo file! Sul mio sistema utilizzo Java 1.0.2, la versione di default di Java fornita con Red Hat 4.2, per cui ho predisposto la mia variabile di ambiente CPU sul valore LINUX_ELF. Chi avesse il pacchetto Java 1.1.3 installato sul suo sistema potrebbe dover predisporre la stessa variabile per il valore LINUX_J113.

Una volta che si siano predisposte un paio di variabili d'ambiente si è pronti a mandare in esecuzione vrwave. Siccome VRWave utilizza l'ambiente runtime Java occorre assicurarsi, innanzitutto, che la variabile CLASSPATH sia predisposta in maniera corretta. Sul mio sistema Red Hat 4.2 io le ho assegnato il valore:

Si scriva quindi vrwave e l'interfaccia aprirà una finestra. Sul mio sistema ho avuto messaggi molto simili a quello riportato di seguito:

java.lang.InternalError: unsupported screen depth
VRwave: could not load icons at /home/mjhammel/src/graphics/vrwave2/vrwave-0.9/icons.gif
VRwave: could not load logo at /home/mjhammel/src/graphics/vrwave2/vrwave-0.9/logo.gif
java.lang.InternalError: unsupported screen depth
        at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:170)
        at sun.awt.image.InputStreamImageSource.setPixels(InputStreamImageSource.java:459)
        at sun.awt.image.GifImageDecoder.sendPixels(GifImageDecoder.java:243)
        at sun.awt.image.GifImageDecoder.readImage(GifImageDecoder.java:295)
        at sun.awt.image.GifImageDecoder.produceImage(GifImageDecoder.java:155)
        at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:215)
        at sun.awt.image.ImageFetcher.run(ImageFetcher.java:98)
        at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:170)
        at sun.awt.image.InputStreamImageSource.setPixels(InputStreamImageSource.java:459)
        at sun.awt.image.GifImageDecoder.sendPixels(GifImageDecoder.java:243)
        at sun.awt.image.GifImageDecoder.readImage(GifImageDecoder.java:295)
        at sun.awt.image.GifImageDecoder.produceImage(GifImageDecoder.java:155)
        at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:215)
        at sun.awt.image.ImageFetcher.run(ImageFetcher.java:98)

Tutto ciò può essere dovuto o ad una configurazione non corretta di Java sul mio sistema o al fatto che le librerie Java 1.0.2 non supportano la modalità TrueColor (modalità 24 bit) per la quale ho predisposto il mio server X. In ogni caso non sembra che ciò rappresenti un problema in quanto la finestra si è aperta ed io ho potuto iniziare a giocherellare con VRWave. Devo dire anche che, durante tutto il periodo durante il quale ho testato il software, non ho avuto alcun tipo di problema con la gestione del display e dei colori.

Ritengo doveroso far notare a questo punto che, oltre al fatto che il VRML è un linguaggio per la descrizione di mondi tridimensionali navigabili, di lui so pochissimo. Tra le altre caratteristiche di VRML 2.0, ad esempio, c'è il suono spaziale, in virtù del quale il suono di un oggetto in lontananza può crescere enormemente allorché l'oggetto si avvicina. Per quanto ne so VRWave ancora non supporta suoni, ma è anche vero che non ho visitato alcun mondo VRML in cui fossero disponibili dei suoni. Ad ogni modo tutto ciò che vado descrivendo in questo articolo corrisponde a quanto un ipotetico utente può avere la ventura di incontrare casualmente, ovvero ciò che chiunque cominci a muovere i primi passi con il VRML può trovare utile ed interessante. Come chiosa finale si noti poi che il marcato sfuocamento delle immagini riportate di seguito è dovuto alle riduzioni che ho dovuto effettuare, dopo la loro cattura video, per far sì che entrassero in un browser Web delle dimensioni di 640 pixel.

L'interfaccia

 

L'immagine precedente riporta la finestra che appare inizialmente se sulla riga di comando non si fornisce alcun file in input. Ovviamente si può specificare, come file di input, ogni tipo di file VRML (caratterizzato dall'avere l'estensione .wrl nel nome del file) e si possono trovare diversi esempi di file di questo tipo nell'area examples che fa parte del software in distribuzione. I file che rappresentano gli scenari da visualizzare sono costituiti da ordinari file di testo, in maniera niente affatto dissimile da quanto accade per il linguaggio di programmazione POV-Ray. Per farsi un'idea di quello che può essere un file di questo tipo si veda il testo riportato appresso che rappresenta il codice per il file convexify.wrl:

 

La tabella riportata appresso riassume la maggior parte delle caratteristiche della finestra principale di VRWave:
 

Caratteristica
della finestra
Descrizione
File  Funzioni di base per l'input/output di files, con l'aggiunta di informazioni sulla macchina da presa.
Navigate  Predispone le modalità di movimento all'interno del mondo VRML; resetta ed allinea le funzioni per il punto di vista corrente.
Display  Illuminazione, metodi di rappresentazione (statica ed interattiva), colori, sfondo, trasparenza, ecc.
Help  Sistema di aiuto basato su HTML che utilizza Netscape, il quale, a sua volta, deve essere inserito nel percorso di ricerca affinché questa operazione funzioni correttamente.
Flip Modo di Navigazione;  traslazione della scena intorno all'origine e zoom.
Walk Modo di navigazione;  movimento in avanti, indietro, di lato e "spostamento degli occhi".
Fly To Modo di navigazione;  fissa un Punto di Interesse dal quale tutti gli altri movimenti di questo tipo di modo dovranno dipendere (essendo relativi ad esso).
Heads Up Dispone un "heads up display" (display rivolto all'in su) al centro dell'area di visualizzazione;  questo visualizzatore dispone di 3 tipi di navigazione: occhi, corpo e panoramica. Queste modalità corrispondono agli stessi tipi di movimenti che vengono forniti da Walk anche se fissano dei valori iniziali per il settaggio del movimento.
Behaviour Effetti e scopi sconosciuti
Interaction Effetti e scopi sconosciuti
 

Navigazione

Nell'esempio che segue lo scenario riportato examples/office2.wrl è stato aperto (File -> Open) all'interno della finestra di default (in effetti la finestra è rimasta quella che era senza alcun tipo di aggiustamento o ridimensionamento). Per muoversi all'interno di questo scenario si possono utilizzare sia il mouse che la tastiera; per quanto riguarda quest'ultima il suo funzionamento è descritto nel file help/mouse.html che fornisce anche qualche informazione aggiuntiva sui vari tipi di movimento che sono disponibili all'interno di una scena.

Un esempio di movimento all'interno di questa scena potrebbe essere: tenere premuto il tasto centrale del mouse (con il bottone Flip premuto come nell'esempio dell'immagine sottostante) e trascinarlo all'interno dell'area di visualizzazione. In tal modo si otterrebbe la rotazione dell'intero ambiente e del suo contenuto intorno all'origine, che è collocata (anche se non è visibile) al centro dell'area di visualizzazione. Quando si fa partire questo tipo di movimento l'immagine si modifica in un grafico a reticoli per velocizzare il processo di visualizzazione. L'uso dei grafici a reticoli, di oggetti con ombre piatte o con ombre arrotondate o con retinature, durante la navigazione e la visualizzazione statica (per capirci quella che si ha quando non ci si muove all'interno della scena) possono essere controllate mediante l'opzione Display nella barra del menu.
 


scena di esempio: examples/office2.wrl

scena di esempio in modalità a reticoli: examples/office2.wrl

Questa scena è probabilmente la più carina, almeno dal punto di vista estetico, tra quelle fornite negli esempi. L'immagine riempie tutta la zona di visualizzazione e rappresenta una stanza completa. Navigando all'interno della stanza si scopre abbastanza presto che le mura della stanza stessa scompaiono se la visualizzazione dell'area viene ad essere impedita dalle mura stesse. A titolo di esempio si provi a rovesciare la stanza e quindi la si ruoti verso sinistra, il proprio punto di vista è ora al di là del muro di destra, per consentire la visualizzazione dell'interno della stanza, però, il muro non viene disegnato. Tale comportamento del software può essere modificato utilizzando l'opzione Display -> Two-sided Polygons e predisponendola su "On". Il valore di default Auto non visualizza un muro se questo viene a frapporsi alla vista dell'ambiente, se invece si predispone questa opzione sul valore on il muro diventa visibile e la camera non viene vista.


examples/sensors/touchsensor.wrl, con il Display->Background
predisposto a grigio ed il bottone di Navigazione Heads Up premuto.

Nell'esempio analizzato di seguito viene selezionata l'opzione Heads Up e si possono vedere le tre funzioni di vista illustrate, nel bel mezzo dell'area di visualizzazione. Queste piccole scatole non si spostano con il resto della scena anche se la si trascina da una parte all'altra della finestra di visualizzazione, esse restano ferme al centro di questa finestra. Una linea rossa che congiunge il centro di una di queste scatole alla locazione corrente del cursore dà la direzione e la velocità (linee più lunghe rappresentano velocità più alte).

Il movimento della piccola sfera all'interno dell'immagine viene gestito mediante l'uso del pulsante sinistro del mouse, ma soltanto quando il cursore si trova sulla grande scatola verde. Spostando il cursore, sempre con il pulsante sinistro del mouse tenuto premuto, si ottiene lo spostamento della sfera all'interno dell'area di visualizzazione. Se il mouse lascia la superficie occupata dalla scatola la sfera si ferma. Si noti che con superficie della scatola non si intende solo ed esclusivamente una faccia della scatola stessa - si intende piuttosto ogni zona della scatola che sia attualmente visibile da parte dell'utente.
 
Se si dispone di un computer abbastanza veloce e di una sufficiente quantità di memoria centrale si può attivare la retinatura interattiva. Ciò consente di vedere gli oggetti all'interno della scena, con le loro retinature al completo, anche mentre si spostano scenari e oggetti che si trovano nell'area di visualizzazione. Sebbene non possa mostrare questa caratteristica in questa sede posso visualizzare un'ulteriore scena di esempio con la quale una funzione di retino viene applicata sulle facce di un cubo. Il primo esempio illustra la retinatura applicata su di un cubo con l'opzione Two-sided Polygons disposta ad off. L'esempio successivo, costituito da un'immagine catturata per intero in modo da poter vedere un po' meglio i dettagli, riporta la stessa immagine di prima con l'opzione Two-sided Polygons predisposta su on.


examples/isub/cube.wrl, con retinatura statica disposta ad on

La stessa immagine, ma con l'opzione two sided polygons predisposta su on
consente di vedere meglio le parti trasparenti dell'immagine.

A proposito di siti VRML 2.0

La versione beta del plug-in per Netscape di VRWave non funziona con Netscape 4.0 a causa di alcune modificazioni apportate al codice relativo alla sicurezza, nel passaggio dalla versione 3.0 alla 4.0. Poiché a casa utilizzo la versione 4.03 di Netscape non sono stato in grado di testare il plug-in. Per di più, poiché tutti i siti VRML visitati utilizzano il VRML immerso in HTML e poiché queste pagine hanno fatto sì che la mia versione di Netscape collassasse allorché ho cercato di caricarle, non sono riuscito a testare l'installazione mime/type che avrebbe dovuto consentire di lanciare VRWave come un visualizzatore esterno. Ho perfino provato a scaricare una versione più aggiornata di Netscape, ma la mia connessione, mentre effettuavo il download è caduta a causa di un time out (questa versione è ora di circa 10 Mb). Questo è tutto ciò che ho provato a fare fino a pochi giorni prima che arrivasse il momento della pubblicazione dell'articolo e prima di provare a vedere se il tutto funzionasse. Lo so! È tutta colpa mia, VRWave non c'entra nulla!.

Come ottenere aiuto ed altre informazioni

Nella barra di menu c'è un'opzione Help nella parte più alta della videata. Questa opzione richiede che nel proprio percorso di ricerca sia presente Netscape in modo che VRWave possa lanciarlo. Se Netscape è già in funzione non c'è nulla di cui preoccuparsi visto che VRWave ha bisogno, innanzitutto, che venga lanciato Netscape (che dovrà pertanto essere presente nel proprio percorso di ricerca), prima che vada in esecuzione VRWave stesso. Non sono ancora arrivato a chiarirmi se mi piace di più questa soluzione o se avrei preferito vedere utilizzare l'interfaccia NetHelp di Netscape. Propendo per la seconda soluzione anche se NetHelp potrebbe non essere accessibile da Java (per quanto mi riguarda utilizzo un'API che poggia su Xlib in sua vece).

Il file README che accompagna il software eseguibile presente nel pacchetto dice che la guida d'utente on line per VRWeb (il predecessore di VRWave) è disponibile all'indirizzo http://www.iicm.edu/vrweb/help.  Sembra però che questo link non sia più attivo e per quanto abbia navigato nel sito web principale di VRWave ho trovato soltanto un link a http://www.iicm.edu/vrwave/release, che contiene svariata documentazione on line, ma non ho trovato nulla che somigliasse ad una pura e semplice guida. I migliori file di aiuto disponibili sono unicamente help/install.html ed help/mouse.html nelle directories runtime del pacchetto con gli eseguibili; più in particolare il file mouse.html contiene informazioni dettagliate sul funzionamento di mouse e tastiera per la navigazione all'interno delle scene.

Compilazione dei sorgenti

Le cattive nuove su questo fronte riguardano il fatto che il mio sistema di sviluppo Java sembra non volerne sapere di funzionare per cui non posso dire nulla che abbia senso sulla compilazione di VRWave a partire dai sorgenti che fanno parte del pacchetto in distribuzione. Il mio ambiente Java, a Denver, sembrava funzionare, anche se parzialmente, ora che mi sono trasferito a Dallas però devo aver inavvertitamente modificato qualcosa visto che sia Javac che Vibe non danno più segni di vita. Potrebbe essere l'ora di aggiornare il sistema e passare comunque alla Red Hat 5.0 in maniera da cercare di risolvere tutti i problemi una volta per sempre.
 

Wave o non Wave!

Questo è il problema:  VRWave, in fin dei conti, è o non è un buon pacchetto per vedere ed imparare un po' di VRML? La risposta, ovviamente, è si. Il pacchetto è ancora piuttosto giovane (o acerbo) ma, ciò nonostante; è stabile: non è mai collassato durante tutti i test che ho fatto con i diversi file che gli ho sottoposto (è pur vero che sono riuscito esclusivamente ad utilizzare i file di esempio presenti nel pacchetto). Una cosa che mi avrebbe fatto piacere vedere è sicuramente un miglior sistema di aiuto o almeno un sistema che mi consentisse di configurare l'allocazione di Netscape (siccome spesso aggiorno il browser non lo tengo nella mia area, piuttosto utilizzo uno script che sa come fare a trovarlo). La caratteristica di poter specificare un URL è notevole ma sarebbe stato carino poter selezionare l'URL stesso all'interno di una lista di URL, caratteristica questa forse più propria di un browser che di un visualizzatore VRML. Ritengo che per il futuro tutto dipenderà da ciò che VRWave deciderà di diventare.

Per chi sta muovendo i primi passi con il VRML e vuole soltanto dare un'occhiata ad alcuni esempi questo pacchetto può rappresentare un buon punto di partenza. Ci si dovrà dotare di un ambiente di sviluppo Java funzionante - per capirci un ambiente nel quale poter eseguire applet Java se non compilare codice Java. All'infuori di quanto appena detto l'installazione è velocissima e ci sono una quantità tale di file di esempio da essere piacevolmente intrattenuti un bel po' prima di mettersi a scrivere i propri mondi VRML.
 
indent
 

[ La pagina della Musa ] [ Indice ]


Per l'articolo originale: © 1998 Michael J. Hammel - Pubblicato sul n. 26 della Linux Gazette
Per l'edizione italiana: © 1998 A. Cartelli - Pubblicato sul n. 3 di LGEI a cura del LUGBari