English (UK)

CyberX3D: esportare scene Java3D PART 2

Tratto da programmazione.it scritto da Dario Guadagno

In questa ultima parte si analizzerà come utilizzare le classi fornite per importare o esportare scene in VRML. Le due classi relative all’interfacciamento con file e creazioni in VRML sono: VRML97Saver e VRML97Loader.

La prima, come si può intuire dal nome, consente di salvare gli ambienti creati in Java3D come file VRML, mediante una conversione che, attraversando tutto lo scene graph, individua i nodi rilevanti e li trasforma in istruzioni VRML (a loro volta scritte sotto forma di nodi, che generano un albero che descrive una scena tridimensionale). La sintassi da utilizzare è la seguente:

import cv97.j3d.*;
...
BranchGroup j3dBranchGroup = ...
VRML97Saver saver = new VRML97Saver();
saver.setBranchGroup(j3dBranchGroup);
saver.save(“nomeScena.wrl”);

Il codice indicato consente di esportare in formato standard VRML la scena corrispondente al content branch radicato nel j3dBranchGroup. L’ambiente salvato sarà visibile con qualunque strumento in grado di aprire file VRML.

Funzionamento analogo, ma chiaramente inverso, è quello della classe VRML97Loader, che consente di aprire un file VRML, convertirne il contenuto in un insieme di nodi Java3D, e trasformarli in un content branch radicato in un unico BranchGroup, che quindi può essere utilizzato per le normali operazioni previste da Java3D relative agli ambienti tridimensionali. La sintassi per utilizzare la suddetta classe è la seguente:

import cv97.j3d.loader.*;
...
Canvas3D c3d = ...
VRML97Loader wrlLoader = new VRML97Loader(c3d);
Scene s = wrlLoader.load(“nomeScena.wrl”);
BranchGroup sgGroup = s.getSceneGroup();

Il loader viene inizializzato con la Canvas3D, che contiene l’universo in cui si sta lavorando per la creazione di un ambiente 3D. L’importazione di una scena descritta in VRML avviene in due fasi: dapprima, utilizzando il metodo load(), si carica il file .wrl che rappresenta la scena e si ottiene così una com.sun.j3d.loaders.Scene corrispondente al file caricato; poi, utilizzando il metodo getSceneGroup(), si ottiene il BranchGroup in cui è radicato il content branch, che descrive la scena sotto forma di istruzioni e nodi in Java3D.

L’oggetto sgGroup ottenuto potrà, quindi, essere utilizzato nel codice Java che segue la sua istanziazione come un qualsiasi BranchGroup, per cui potranno essere aggiunti ulteriori nodi come suoi figli, potrà essere associato ad un nodo gruppo (BranchGroup o TransformGroup) padre, o potrà essere inserito nell’universo su cui si sta lavorando, per consentire la visualizzazione della scena che sgGroup rappresenta.