|
El método init() es llamado por el Browser (Netscape, Internter Explorer, ..)
la primera vez que el usuario visita la página. Casi todo el trabajo lo
haremos aquí, construiremos la animación y la iniciaremos.
La localización del fichero .anm que contiene la animación se especificará
mediante un parámetro del applet que llamaremos url y que contendrá el
valor URL del fichero; los ficheros de imagen de texturas a los que se haga referencia
dentro del fichero .anm han de estar en su mismo directorio. Para obtener la escena haremos:
URL url = null;
try {
url = new URL(getParameter("url"));
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
Una vez conocemos la URL del fichero cargar la animación utilizando el Loader es
igual de sencillo:
Scene scene = null;
AnimaLoader loader = new AnimaLoader(Loader.LOAD_ALL);
try {
scene = (AnimaScene) loader.load(url);
} catch (Exception e) {
e.printStackTrace();
return;
}
Ahora ya tenemos toda la animación cargada. Para añadir la escena
que hemos obtenido crearemos el típico "Virtual Universe" que se
crea en cualquier aplicación Java3D y le añadiremos la escena :
VirtualUniverse universe = new VirtualUniverse();
javax.media.j3d.Locale locale = new javax.media.j3d.Locale(universe);
BranchGroup root = scene.getSceneGroup();
root.compile();
locale.addBranchGraph(root);
GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
canvas = new Canvas3D(gc);
canvas.stopRenderer();
BranchGroup viewgroup = new BranchGroup();
ViewingPlatform viewingPlatform = new ViewingPlatform(1);
Viewer viewer = new Viewer(canvas);
viewer.setViewingPlatform(viewingPlatform);
TransformGroup[] vgs = scene.getViewGroups();
TransformGroup tg = vgs[0];
tg.addChild(viewingPlatform);
viewgroup.addChild(tg);
locale.addBranchGraph(viewgroup);
Ya sólo queda iniciar la animación. Crearemos un alpha, estableceremos su tiempo
de duración con el tiempo total de la animación y inicializaremos los behaviors :
Alpha alpha = null;
Behavior[] behaviors = scene.getBehaviorNodes();
if (behaviors != null) {
alpha = new Alpha();
alpha.setIncreasingAlphaDuration(scene.getFilmTime());
for (int i = 0; i < behaviors.length; i++) {
if (behaviors[i] instanceof Interpolator)
((Interpolator) behaviors[i]).setAlpha(alpha);
}
}
setLayout(new BorderLayout());
add(canvas, BorderLayout.CENTER);
if (alpha != null)
alpha.setStartTime(System.currentTimeMillis());
|