Está en la página 1de 11

1

VRML 2.0 con Java CAPÍTULO 5

CAPÍTULO 5
Autoría de la interfaz externa

Autoría de Interfaz Externa

Contenido CAPÍTULO 5

• Las diferencias entre los scripts de Java y la EAI


• Primeros pasos
2

VRML 2.0 con Java CAPÍTULO 5

• Extraer información de la escena


• Todo en conjunto
• Utilización de la interfaz externa

Las diferencias entre los scripts de Java y de la EAI

Antes de empezar a aprender la EAI, tenemos que mirar en qué se


diferencia del interior de scripts de Java. Usted debe ser consciente de cuál
de los dos ambientes que están operando en, ya que son significativamente
diferentes. Secuencias de comandos y las interfaces externas tanto aplicar
la misma interfaz del navegador que se ha definido en el capítulo anterior, y
que también puede pasar los acontecimientos alrededor de la escena, pero
que está por donde las similitudes fin.
3

VRML 2.0 con Java CAPÍTULO 5

Vamos a empezar con la evidente diferencia de ubicación en el entorno del


navegador. Secuencias de comandos, que fueron cubiertos en el capítulo
anterior, operan dentro de un navegador de VRML. Aparte de utilizar la
creación de redes, no hay forma de una secuencia de comandos para
comunicarse con cualquier código Java externos tales como un applet. Por
otro lado, la única manera de utilizar la EAI es como parte de un applet. Que
no puede existir por sí solo.

Figura 5.1 La anatomía de cómo las partes de VRML se refieren a


todos juntos

Ambos entornos de uso diferentes, nonoverlapping partes del paquete vrml


jerarquía. Scripts de utilizar los paquetes vrml, vrml.node, y vrml.field.
Applets de utilizar los paquetes en virtud de la jerarquía vrml.external. No
puede mezclar los dos. Aunque ambos tienen una implementación de la
interfaz del navegador no se puede intercambiar las dos clases.

Recibiendo eventIns es totalmente diferente. Scripts tienen un método


definido para todos los eventos, pero en la interfaz externa, debe registrar
una clase de estilo de devolución de llamada para cada caso de que usted
está interesado pulg Enviar valores a otros nodos sea razonablemente
similar para los dos sistemas.

A pesar de scripts y applets externos tienen una implementación de la


interfaz del navegador, existen algunas diferencias. En particular, la versión
externa tiene un par de métodos de modo que usted pueda tener acceso a
la escena. A diferencia de los scripts, un applet no tiene ningún
conocimiento previo del medio ambiente y, por tanto, las necesidades
adicionales de asistencia en forma de estos dos métodos adicionales para
que se inició.

Cómo empezar

La interfaz externa Java está diseñado para el control y la interfaz con un


navegador de VRML desde el exterior. En pocas palabras, esto significa que
usted necesita para escribir un applet de Java y, a continuación, incluir el
código adicional. Por lo tanto, nuestro punto es con el archivo HTML.
4

VRML 2.0 con Java CAPÍTULO 5

El archivo HTML

Puede utilizar la aplicación con el archivo VRML de dos maneras. El primero,


más genérico método es colocar el applet en la página junto con el archivo
VRML. El mundo VRML se coloca en la página con una etiqueta EMBED. Un
ejemplo de esto es

<HTML>
<BODY>
<APPLET CODE="myapplet.class" MAYSCRIPT>
<! - Lista de los parámetros de aquí ->
</ APPLET>
<embed SRC="myworld.wrl" WIDTH="500" HEIGHT="500">
</ BODY>
</ HTML>

Si usted no está interesado sobre el uso de un navegador de extensiones, se


puede usar el método alternativo, que es utilizar LiveConnect y generar
dinámicamente el contenido de la página en Java. En este caso, todo lo que
necesita hacer es colocar el applet de Java en la página con una etiqueta
APPLET.

Usted tendrá que incluir la etiqueta MAYSCRIPT al final de la applet. Este es


un comando para Netscape que el código Java en el applet está autorizado a
hablar con el código JavaScript en la página HTML. La interfaz del navegador
utiliza algunos de JavaScript incrustado / LiveConnect funcionalidad, por lo
que independientemente de si están realmente utilizando JavaScript o no,
tiene que estar allí.

El Applet
Después de terminar con el archivo HTML, el siguiente paso es crear una
norma de aplicación. No hay nada especial que lo que tiene que hacer. Una
vez que esté listo para comenzar a escribir el código para hablar con el
navegador, es necesario obtener una instancia del navegador. Una de las
dos diferencias en el navegador de la clase de secuencias de comandos
versión es su capacidad para obtener una referencia a una copia de la clase
de navegador, lo que lo hace con el método estático getBrowser. Cuando el
código está listo para comunicarse con el navegador de VRML, puede
obtener una referencia interna y mantener una copia del resultado obtenido:

Nota: En el momento de escribir esto, el comportamiento del getBrowser no


estaba definido para los casos de múltiples mundos VRML incrustado en una
página. Compruebe las especificaciones para las últimas actualizaciones
sobre esta situación.

import java.applet.*;
import vrml.external.Browser;
5

VRML 2.0 con Java CAPÍTULO 5

public class myapplet extends Applet {


Browser b;
public myapplet {
Browser b = Browser.getBrowser();
// now go and do stuff with it
}
}

Una vez que haya este navegador de referencia, puede comenzar a obtener
información de la escena VRML utilizando el resto de los métodos de la clase
de navegador.

Extraer información de la escena


Ahora que usted ha establecido una conexión con la escena, tendrá que
enviar información, ya sea a la escena o recuperar información de él.
Obteniendo información de la escena puede tomar una de dos formas. La
primera forma es recibir eventos que se generan a partir de los nodos
dentro de la escena. Con la interfaz externa, el sistema requiere de una
cantidad razonable de trabajo, como se verá más adelante. Si no es
necesario para extraer la información que se genera, entonces puede
utilizar el segundo método y acaba de leer la información del nodo que lo
necesite.
Cómo nodo Referencias
Antes de que pueda leer o modificar las propiedades de la escena, es
necesario que usted tenga un nodo de referencia para leer. En secuencias
de comandos, la búsqueda de este nodo de referencia es directa, ya que ha
pasado una referencia a usted, ya sea como un evento (SF / MFNode) o por
medio de un campo con el uso. Applet desde el exterior, sin embargo, no
hay forma de pasar directamente a un nodo de un applet, por lo que
necesita un enfoque alternativo.

Dado que no tenemos una referencia a cualquier nodo, tenemos que


consultar el navegador de un puntero a un nodo en particular, utilizando el
método getNode. El argumento a favor de este método es una cadena
conteniendo el nombre del nodo que se declaró con DEF en el archivo VRML
fuente. Si no puede encontrar getNode ese nodo, devuelve nulo. Ahora que
tiene este nodo de referencia, que puede hacer cualquiera de las
operaciones que en él se puede ver con secuencias de comandos, aunque
en una forma ligeramente diferente.

Por supuesto, hay otra alternativa. Si se han construido una colección de


nodos con createVrmlFromX las llamadas, puede consultar directamente
estos nodos. El navegador de clase métodos no les importa que el original
se han generado los nodos. Mantenga esta función en cuenta porque en los
últimos capítulos de este libro vamos a hacer un uso intensivo del mismo.

Lectura de Valores de la escena


6

VRML 2.0 con Java CAPÍTULO 5

Una tarea común es la consulta de los nodos de sus valores. Su applets


seguir las normas de acceso al mismo como un nodo tendría en la escena
de VRML, por lo que sólo puede leer los valores de los campos exposedField
y eventOut de nodos. Con esta limitación en mente, ahora podemos hacer
una consulta sobre un nodo de un campo particular valor por pedir una
referencia a ese eventOut.

Sólo pisar a un lado por un momento, echemos vistazo a la definición de la


clase java Nodo de vrml.external.node.Node:

public class Node {


public String getType();
public EventIn getEventIn(String name)
throws InvalidEventInException;
public EventOut getEventOut(String name)
throws InvalidEventOutException;
}

Verá que sólo hay dos métodos para obtener información sobre el nodo de
las esferas. Puesto que usted no tiene acceso a los campos dentro de la
escena VRML, no tiene acceso a ellos desde el applet bien. Para ambos
métodos de la getEvent, pase la cadena conteniendo el nombre del campo
que desee. Nombres de campos y tipos de campo no están en conflicto
porque el navegador sabe internamente qué tipo de nodo se le consulta y,
por tanto, conoce el campo válido para ese nodo.

NOTA: Recuerde que una exposedField es el equivalente de un campo,


eventIn y eventOut todos envueltos en un campo. Esto le permite usar
getEventOut un método para recuperar los valores de un exposedField.

Desde el nodo de la clase se puede ver que el método devuelve un


getEventOut genéricos EventOut clase. Los valores que representan estas
clases serán diferentes para cada nodo, así que tendrá que emitir el valor de
retorno al tipo adecuado antes de leer el valor de ella. Que tiene una
transformación nodo llamado myTx y desea leer el campo de la traducción
de la misma. El código que tendrías que escribir se parece a lo siguiente:

B = Browser.getBrowser navegador ();


Transformar b.getNode = nodo ( "myTx");
EventOutSFVec3f posición = (EventOutSFVec3f) transform.getEventOut
( "traducción");

No hay necesidad para que usted llame getBrowser cada vez que desee
utilizar el navegador clase de llamadas. Yo normalmente recibe un ejemplo
para cada uno de los principales bloques de código de referencia y que
pasan a través de cualquier clase que puedan necesitar.

Una vez que haya sobre el terreno de referencia, puede leer los valores de
7

VRML 2.0 con Java CAPÍTULO 5

la misma, mediante el apropiado getValue métodos definidos para cada tipo


de campo.

Recepción de Eventos

Si necesita una información en tiempo real de los valores, en vez de


limitarse a una pareja ocasional vistazo de vez, tendrá que añadir el
equivalente de una ruta a la escena. Digo "el equivalente" porque no hay
forma de especificar una ruta en el archivo VRML a una fuente externa.
Además, el applet no a todos parece un script de VRML en el navegador, no
puedo siquiera darle una kludge para que usted pueda evitar esta
limitación. En lugar usted necesita para notificar el navegador que usted
está interesado en recibir eventos de un campo determinado.

Java 1.0 no tienen la capacidad de crear la tradicional C / C + + estilo estilo


funciones de devolución de llamada que se basan en función de los
punteros. Para compensar esto, usted necesita utilizar el método tradicional
de Java de crear una subclase de una clase base conocida (por lo general
una interfaz), y luego de que el registro de la subclase con el "sistema".
VRML Para esto toma la forma de la interfaz EventOutObserver.
EventOutObserver se comporta de manera similar a la Motif sistema de
devolución de llamada desde la interfaz gráfica del sistema de ventanas de
UNIX, el sistema X Window. Junto con los datos normales, también puede
transmitir su propia información. Usando esta interfaz, usted puede utilizar
un solo EventOutObserver para eventos de múltiples nodos.

Para crear una clase para manejar los acontecimientos, lo que tiene que
hacer tres cosas:

1. Crear una clase de observación, mediante la aplicación del


EventOutObserver interfaz. Como parte de esto, también debe escribir el
método de devolución de llamada, que es donde se hará el evento de
transformación.
2. En el código que utilizará la información del evento, crear una nueva
instancia de la clase.
3. Por último, recuperar el nodo y, a continuación, la eventOut que
desee. EventOut que usted utiliza para decirle al navegador que usted está
interesado en este caso utilizando el método de asesoramiento y su recién
creada clase observador instancia.

Para traducir el código anterior en que se haga lo siguiente:


class MyObserver implements EventOutObserver {
public void callback(EventOut value,
double timeStamp,
Object data)
{
// cast the event out and do something with it
8

VRML 2.0 con Java CAPÍTULO 5


}
}

class myVrmlClass {

myVrmlClass ()
{
Browser b = Browser.getBrowser();
Node time = b.getNode("myTimeSensor");

// now create an instance of the observer


MyObserver obs = new MyObserver();

// now register the callback


time.getEventOut("fraction_changed").advise(obs, null);

// go and do stuff
}
}

Cada vez que un evento se genera por la TimeSensor, el applet es notificada


por una llamada al método de devolución de llamada, desde el que puede
entonces hacer lo que necesita transformación.

El método asesorar a dos argumentos. El primero es el ejemplo de su clase


de observadores y el segundo es definido por el usuario de cualquier clase
Java, que es cómo se pueden pasar los datos a la devolución de llamada. Si
va a pasar los datos a la devolución de llamada, los datos se pasa a un
objeto y, a continuación, tendrá que emitir de nuevo a utilizar en la llamada.
Por ejemplo, usted podría tener una serie de sensores de la alimentación de
todos una información en el observador y luego usar estos datos para
distinguir el sensor que causó el evento.

Si usted piensa cuidadosamente sobre lo que he dicho en el párrafo anterior


se nota que usted puede hacer algo que no se puede hacer con scripts.
Básicamente va a crear una ruta a la aplicación de la escena VRML
registrando el observador. Si usted tiene múltiples nodos, todos con el
mismo método de devolución de llamada y, a continuación, que ha creado
en el ventilador a un "nodo" y todavía puede decir que el nodo de evento.
En este caso, el nodo es en realidad el applet de Java, pero la escena de
VRML no saben la diferencia.

Usted puede hacer algo en la llamada que usted puede hacer en cualquier
otro lugar de la escena, tales como leer otros valores, hacer llamadas a AWT
o la red, o incluso volver a escribir los acontecimientos de la escena.

Escritura de Valores Volver a la escena


Una vez que haya en la información procedente de la escena, puede que
desee modificar el contenido de la escena. Modificación de la escena el
contenido de un applet es el mismo que hacerlo desde dentro de un script.
9

VRML 2.0 con Java CAPÍTULO 5

Usted necesidad de generar un evento con la información adecuada y lo


remitirá a la meta nodo.

Si usted ha estado siguiendo lo que ha venido sucediendo hasta ahora,


usted debería ser capaz de adivinar lo que voy a decir a continuación.

1. Obtiene una referencia al nodo que desea enviar a un evento con el


método getNode o mediante la creación de un nodo con el createVrmlFromX
llamada.
2. EventIn recuperar el campo con el método getEventIn. Tendrá que
emitir el eventIn devuelto con el tipo específico, tal como se definen en
vrml.external.field.
3. Enviar valores de este campo utilizando el método SetValue para el
tipo.

Una vez más, útil en la traducción de este código, podemos mover la esfera
de VRML en el siguiente archivo desde su ubicación original a otra mediante
el envío de un nuevo valor a la traducción de transformación por encima de
ella:

#VRML v2.0 utf8


DEF move_tx Transform {
translation 2 0 -1
children Shape {
geometry Sphere { radius 1.5 }
}
}
y la siguiente aplicación:

import java.applet.*;
import vrml.external.*;
import vrml.external.field.*;

public class myapplet extends Applet {


public void start() {
Browser b = Browser.getBrowser();
Node aTransform = b.getNode("some_transform");
EventInSFVec3f tx =
(EventInSFVec3f)aTransform.getEventIn("translation");

float new_position[] = {0, 1, 0.5f);


tx.setValue(new_position);
}
}

Como puede ver, el proceso es básicamente el mismo, ya sea para lectura o


de escritura a un nodo. La fecha y la hora que se genera para el evento
resultante depende del navegador. Usted no puede obligar a pasar cosas en
una hora en el mundo VRML.

Juntando Todo

Si usted reúne las técnicas que hemos demostrado en estos primeros cinco
capítulos y ponerlos en el crisol de culturas, ¿cuál es el resultado? Algunos
10

VRML 2.0 con Java CAPÍTULO 5

de hecho muy interesante el código.

VRML es de representación de la realidad virtual (VR) en una plataforma


independiente. Mediante la combinación de Java y VRML, puede llegar a un
impresionante sistema de realidad virtual en un corto período de tiempo. De
hecho, este libro pretende, en parte, a mostrar cómo crear un sencillo
sistema multiusuario VRML utilizando sólo el estándar VRML 2.0 habilidades.

Para hacer algo verdaderamente útil (o incluso completamente inútil!),


Tendrá que utilizar más que la interfaz del navegador. Al combinar el
navegador de clase y, en particular, la createVrmlFromX llamadas, con la
interfaz externa puede producir escenario dinámicamente en respuesta a la
entrada del usuario. Dentro de unos pocos capítulos, vamos a producir una
escena básica que sólo utilice el generador de VRML 2.0 y Java con la
interfaz externa.

Para generar una escena dinámica, todo lo que necesita es un solo nodo en
la agrupación de base de archivos VRML. Después de todo lo que pueden
ser generados dentro de su aplicación, y añadió que los niños a esa
agrupación nodo. Si mantiene un registro de lo que generan y donde se
encuentra en la escena gráfica, puede volcar esos datos como un archivo de
texto. Voila, una simple escena generador, utilizando VRML para crear VRML.

Utilización de la interfaz externa

Puede utilizar la interfaz externa en tantos lugares que es difícil empezar


una lista de ellos. Probablemente lo que más comúnmente se utilizan para
proporcionar una mezcla de aplicación Web donde el VRML proporcionaría
una interfaz en 3-D a la información, mientras que el de Java sería una
normal de 2-D GUI.

En secciones posteriores de este libro nos presenta una serie de


aplicaciones que utilizan la interfaz externa. Como verán, no es necesario
que se limita a proporcionar un solo interfaz de 2-D.

Otra forma de utilizar la interfaz externa es la aportación de algunas


funcionalidades de back-end para el sistema. Un uso común es proporcionar
el sistema de toma de multiusuario mundos VRML. El applet de Java se
encarga de toda la funcionalidad de red, la gente se mueve alrededor de la
escena, y proporciona el chat. Un ejemplo perfecto de un mundo VRML es
multiusuario CyberHub Cliente de Blacksun Interactive
(http://www.blacksun.com/). Para crear un mundo multi-, todo lo que
necesita hacer es crear un mundo normal VRML 2.0 y luego envolver el
siempre páginas HTML a su alrededor. Oye, presto, instantánea mundo
donde se puede chatear con otros en el ciberespacio. Toda la funcionalidad
11

VRML 2.0 con Java CAPÍTULO 5

está en manos de una colección de applets de Java que usted necesita


saber nada acerca de.

Que tienen más probabilidades de estar usando la interfaz externa en una


situación en la que usted quiere hacer algo más que producir una buena
página Web de la adición. La creación de un applet de utilizar VRML tiene
algo más que un par de líneas de código. Sin embargo, espero que usted
está leyendo este libro para hacer algo más que crear una página Web o
dos.

Resumen

Como podrán ver durante el resto del libro, la interfaz externa tiene una
variedad de usos. Similar a la anterior capítulo sobre secuencias de
comandos, en este capítulo sólo introduce la interfaz externa. Ustedes han
visto no sólo cómo configurar el applet y la página web para comunicarse
con una escena de VRML, pero también la forma de transmitir información
dentro y fuera de ella.

Obtendrás un montón de prácticas como el uso que se va avanzando. Parte


3 y más allá de cubrir las solicitudes del uso de la interfaz externa y de
secuencias de comandos en los mundos VRML. Si desea ver sólo lo que se
puede hacer con la Iniciativa, en particular, eche un vistazo a los capítulos
12 y 18. Capítulo 12 crea un editor de VRML 2.0 que se construye su escena
interactiva en el navegador, y en el capítulo 18 se basa el cliente final de
nuestro sistema multiusuario.

Los siguientes tres capítulos tener un aspecto distinto al de Java / VRML


mezclar. Que se verá en las API de otros que no están oficialmente en la
especificación de VRML 2.0, pero están bien vale la pena conocer. El primero
es la realidad de líquidos, que es un basadas en Java para VRML VRML de
herramientas de navegación (si es que tiene sentido!). Después de que nos
fijamos en multiusuario tecnologías actualmente disponibles.

También podría gustarte