Tips & Tricks
Home Anima3d


Creación de Applets, uso del Loader.
[3 Septiembre 2000]

Incluir una animación en nuestros programas y páginas Web requiere utilizar un cargador (Loader) para ficheros en formato Anima3d, ficheros .anm. La función del Loader es convertir el fichero .anm en objetos Java. En este artículo utilizaremos el Loader incluido en Anima3d para crear un applet que incluiremos en un página html.


1. Inicio

Puedes encontrar el código completo y la clase de este applet en la distribución bajo el directorio donde hayas instalado Anima3d con el nombre Anima3dApplet.java.

El Loader para ficheros .anm que se incluye en la distribución implementa la interfaz Loader definida en la API Java3D. Lo primero que haremos será crear un nuevo fichero para nuestro applet, por ejemplo: "Anima3dApplet.java", definiremos la clase como subclase de Applet y sobreescribiremos los métodos init, start, y stop.
Entre las clases que hemos de importar está "com.rio.anima.loader.AnimaLoader" que viene con la distribución de Anima3d. Si hemos seguido los pasos de instalación el fichero "anima3d.jar" ha de encontrarse en los dos directorios típicos de instalación de Java y podrá ser accedido. Recordar que "anima3d.jar" ha de estar en los directorios (windows) : "\jdk1.3\jre\lib\ext" y "\archivos de programa\javasoft\jre\1.3\lib\ext".
El código queda así:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.media.j3d.*;
import com.sun.j3d.loaders.*;
import com.sun.j3d.utils.universe.*;
import com.rio.anima.loader.*;

public class Anima3dApplet extends Applet {
	
	public void init() {
	}
	
	public void start() {
	}
	
	public void stop() {
	}	
}
2. Carga de la animación. Método init()

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 :

/* Construir el Virtual Universe con la mejor configuración */
VirtualUniverse universe = new VirtualUniverse();
javax.media.j3d.Locale locale = new javax.media.j3d.Locale(universe);
/* obtener la raíz del grafo de la escena y añadirla */
BranchGroup root = scene.getSceneGroup();
root.compile();
locale.addBranchGraph(root);

/* construir un Canvas con la mejor configuración posible */
GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
canvas = new Canvas3D(gc);
canvas.stopRenderer();

/* creal el "View Branch Graph" */
BranchGroup viewgroup = new BranchGroup();		
ViewingPlatform viewingPlatform = new ViewingPlatform(1);	
Viewer viewer = new Viewer(canvas);		
viewer.setViewingPlatform(viewingPlatform);    
    	
/* obtener cámara y añadirla al "View Branch Graph" */
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 :

/* crear Alpha */
Alpha alpha = null;
Behavior[] behaviors = scene.getBehaviorNodes();
if (behaviors != null) {
	alpha = new Alpha();
	/* establecer el tiempo total de la animación */
   	alpha.setIncreasingAlphaDuration(scene.getFilmTime()); 		
   	for (int i = 0; i < behaviors.length; i++) {
   		if (behaviors[i] instanceof Interpolator) 
    		((Interpolator) behaviors[i]).setAlpha(alpha);
    }
}
    
/* Añadir el canvas al applet */	
setLayout(new BorderLayout());
add(canvas, BorderLayout.CENTER);

/* Establecer tiempo de inicio ahora */    		
if (alpha != null) 
	alpha.setStartTime(System.currentTimeMillis());

3. Métodos start() y stop()

Cuando un usuario deja la página el Navegador llama al método stop(), en el pararemos el renderizado de la animación para liberar recursos. El método start() es llamado cuando el usuario revisita la página, o cuando la ventana estaba minimizada y se ha restaurado

public void start() {
	canvas.startRenderer();
}

public void stop() {
	canvas.stopRenderer();
}

Como ya se ha dicho el método init() es llamado la primera vez que el usuario visita la página. Lamentablemente algunos navegadores vuelven a llamar a init() cuando la página se revisita.


4. Inclusión del Applet en una página Html

Para incluir el applet en un fichero Html tenemos que insertar las siguientes lineas en la página .html o .htm :

<APPLET CODE="Anima3dApplet.class" WIDTH=250 HEIGHT=200>
<PARAM name="url" value="url_fichero">
</APPLET>

Donde "url_fichero" ha de ser un url que identifique al fichero, por ejemplo: "file:./animaciones/prueba.anm".


Nota: Para ver los applets bajo Microsoft Internet Explorer la url ha de ser absoluta por ejemplo: "file:c:/documentos/animaciones/prueba.anm" .

Por último hay que convertir la página Html para que utlize los plug-in adecuados. No te asustes. Existe una aplicación que lo hará automáticamente por tí. Se llama HTMLConverter y lo puedes descargar gratis en http://java.sun.com/products/plugin/1.3/converter.html.

De todas formas si utilizas windows puedes utilizar el fichero patrón AppletTemplateConverter.html que viene en la distribución de Anima3d, lo encontrarás en el directorio de instalación del programa. Sólo tienes que cambiar el valor del parámetro "url" por el del fichero de animación que quieras.
Puedes encontrar ejemplos de applets en el directorio "demos".




· Envía tu opinión sobre este artículo a anima3d@terra.es