You are on page 1of 12

1

VRML 2.0 con Java CAPÍTULO 6

El Liquido “Realidad” API

Contenido CAPÍTULO 6

• ¿Por qué un API?


• El líquido Realidad Paquetes Java
• Las clases de Java VRML
• Uso de la API
• Todavía se necesita
2

VRML 2.0 con Java CAPÍTULO 6

¿Por qué un API?

En el capítulo anterior sobre la autoría de interfaz externa proporcionó parte


de la motivación para una API externa para VRML, de hecho, la realidad era
un líquido de última entrada propuesta de una EAI y lo puede todo "oficial"
de EAI puede hacer y más. (Tenga en cuenta que el "oficial" de EAI es
todavía sólo una propuesta, que todavía no ha sido incorporado en la
especificación de VRML.)

Aunque el proyecto de EAI tiene el potencial para convertirse en una


interfaz a través de plataformas y navegadores de VRML, es una solución
ligera. En la práctica, sólo uno o dos navegadores apoyo, que sólo existe en
3

VRML 2.0 con Java CAPÍTULO 6

una plataforma (Windows 95), y existen importantes lagunas en la


funcionalidad proporcionada por la aplicación. Realidad líquido, por otro
lado, es un bien desarrollado API que existe actualmente para muchas
plataformas y ofrece sus propias funciones de representación, de modo
independiente se pueden escribir aplicaciones que omiten por completo el
navegador.

Como un API, la realidad de líquidos puede proporcionar funciones de


análisis, renderizado, VRML y escritura compatible con los archivos, así
como funciones para la manipulación de la escena gráfica interactiva. Puede
aprovechar el AWT de Java para proporcionar los controles que manipulan
los elementos de escena (por ejemplo, un cuadro de diálogo para manipular
un objeto de la posición y orientación), o puede conectar llamadas a
determinados lugares de la escena que se invoca a transversal, o bien sobre
una determinada acción. Por supuesto, las posibles ampliaciones de Java,
como el paquete de JDBC para acceder a bases de datos relacionales,
pueden ser utilizados por un programa escrito con la API de líquidos
realidad.

Un API puede actuar en toda la escena VRML desde el exterior, evitando así
un navegador centrado en vista de la escena. Líquido en la realidad, la
aplicación o applet puede controlar cada objeto independiente. Objetos
pueden chocar entre sí o pueden poner en práctica el comportamiento de
evitación. Esta relación entre los pares de objetos va más allá de lo que es
posible dentro de la actual arquitectura de VRML 2.0.

Realidad líquido no es sólo una de API, es una colección de varios, que no


sólo tiene un API para manipular los nodos de VRML, pero también las API de
nivel inferior a 3-D las matemáticas y el renderizado. En la sección siguiente
le dará una pequeña muestra de lo que está disponible. No podemos
explicar todas las clases de líquidos que tiene la realidad, por lo que nos
limitaremos a resumir el contenido de cada paquete, y algunos de los más
interesantes las clases en cada uno. También vamos a presentar un ejemplo
de cómo utilizar líquidos Realidad.

El líquido Realidad Paquetes Java

Realidad líquido clases se agrupan en 11 paquetes separados, tres de las


cuales son las secuencias de comandos estándar de Java VRML paquetes; el
resto son específicas de la realidad de líquidos. Vamos a examinar estos
paquetes uno por uno: Vamos a empezar con el más general de los
paquetes, que se basan en la parte superior de la funcionalidad de Java, y
4

VRML 2.0 con Java CAPÍTULO 6

nuestra forma de trabajo a los paquetes que proporcionan el alto nivel de


líquidos Realidad API.

Paquetes dnx.util and dnx.awtutil

Estas dos clases de paquetes contienen líquido utilizado internamente en la


realidad. El líquido Realidad documentación recomienda que ninguna de las
clases de estos paquetes ser utilizados directamente por un programador de
aplicación, ya que están sujetas a cambios. El dnx.util envasados se
compone de clases de utilidad general, tales como estructuras de datos
(tablas hash, listas, etc), a través de la intensificación de las enumeraciones
de los contenidos de estas estructuras de datos, los observadores y
observables (aplicación del "observador" patrón de diseño) , y otras clases
de utilidad general.

El paquete dnx.awtutil, por otra parte, contiene gráficos de utilidad clases,


incluidos los componentes, tales como AWT ColorPicker, ImageButton, y
TransparentCanvas. Otras clases incluyen NumberEntry (un campo de texto
que acepta sólo números) y URLEntryPanel (un grupo que contiene un texto
que sólo aceptará URL válida). Las clases en dnx.awtutil no dependen de las
clases en dnx.util.

Paquete dnx.geom

Si estás cansado de escribir varias veces su propio código de 3-D las


matemáticas, dnx.geom es un sueño hecho realidad. Contiene todas las
clases y métodos que usted necesita para almacenar y manipular dos, tres y
cuatro (homogénea) componente de vectores y matrices, y que ofrece una
clase para manipular quaternion rotaciones, así como clases, para realizar
proyecciones ortográfica y la perspectiva. Clases de dibujo en general se
ofrecen para los puntos, líneas y polígonos, y la utilidad de las clases
saltando cajas y las dimensiones también están presentes. Geom La clase
consiste en su totalidad de los métodos para manipular los objetos en este
paquete.

Gran parte de la funcionalidad de este paquete está prevista para el


próximo Java3D API desarrollada por Sun Microsystems en colaboración con
sus asociados para el desarrollo, pero es interesante observar que Java3D
no está disponible o incluso públicamente documentado, sin embargo,
mientras estos Dimensión X clases se han alrededor de más de un año.
Aunque Java3D puede duplicar la funcionalidad del paquete dnx.geom,
Java3D no tiene previsto abarcar la funcionalidad proporcionada por los
otros dnx paquetes, por lo que la API no son dos competidores directos.

Paquete dnx.ice
5

VRML 2.0 con Java CAPÍTULO 6

Ya mencionamos que la realidad Líquido hacer su propio código, el ICE, que


está diseñado para ser portado fácilmente y rápidamente, para proporcionar
la capacidad de hacer en todas las plataformas, y que se adapta fácilmente
a la utilización de aceleración de gráficos nativos. Para utilizar ICE de Java,
sin embargo, necesitamos un conjunto de clases envoltorio que nos
permiten acceder a la prestación de bajo nivel de paquetes. El dnx.ice
paquete proporciona una interfaz uniforme en CIE, Direct3D, OpenGL, o de
otro tipo de paquetes y permite hacer líquidos separados limpiamente a la
realidad de su plataforma de código específico de la prestación.

Clases disponibles incluyen Graphics3D (una encapsulación del framebuffer


con un gran número de métodos para manipular el framebuffer), Modelo
(una colección de primitivas de la prestación), de textura, luz, los
materiales, la niebla, y otros.

Paquete dnx.lr

El paquete dnx.lr VRML es un nodo de escena y la manipulación del paquete


gráfico, es el mayor de los envases de líquidos realidad y se considera el
núcleo de la realidad de líquidos. Las clases son de escenas clave, que
ocupa la escena gráfica, y Nodo, que es la clase padre de todos los nodos de
VRML. Métodos definidos en el nodo le permiten encontrar, obtener o
establecer los pequeños, los padres, los campos, eventIns, eventOuts y
rutas a cualquier nodo. Por lo tanto, para la manipulación de la escena
gráfico, nodo es probablemente el más importante de la clase en la API.

Otras clases incluyen VRMLPrintStream y VRMLTokenizer, clases para llevar a


cabo acciones de selección y las clases para obtener los detalles de una
selección (normal, el punto en la superficie, y así sucesivamente, de la
recogida de objetos). Muchas otras clases de proporcionar información
detallada sobre una escena, la búsqueda de escenas de nodos DEF por
nombre o tipo de nodo, y encontrar, añadir, eliminar o insertar los niños.
Una transversal de clase le permite recorrer la escena gráfica. Incluso hay
clases que te dan en la prestación ganchos transversales de la escena
gráfica, así que usted puede personalizar el proceso de renderizado, si lo
desea.

Paquete dnx.lr.field

El paquete contiene dnx.lr.field clases para cada tipo de campo se define en


6

VRML 2.0 con Java CAPÍTULO 6

la especificación de VRML. Estas clases son en casi de uno a uno la


correspondencia con la norma vrml.field paquete, pero dnx.lr.field no
contiene ninguno de los Const <fieldname> campos presentes en el
paquete vrml.field. Los dos conjuntos de las clases tienen el mismo
significado, pero las distintas aplicaciones, por lo que no son
intercambiables. Por ejemplo, la clase SFFloat aparece en ambos paquetes,
y en ambos paquetes que representa el VRML SFFloat tipo de datos, pero los
métodos difieren entre los dos paquetes. En particular, el dnx clases más
ricas tienen un conjunto de métodos definidos. SFVec3f la clase, por
ejemplo, tiene un normalizar () método para normalizar el vector de una
unidad de longitud y equals () método para comparar dos objetos SFVec3f,
sino que también tiene otras "ajuste" y "obtener" los métodos de
conveniencia. Asimismo, el SFRotation clase puede tener un quaternion
como argumento o puede devolver un quaternion, además de la normal eje
angular argumentos proporcionados por el vrml.node.SFRotation clase.

Paquete dnx.lr.node

Así como el paquete dnx.lr.field definido una clase para cada tipo de campo
de VRML, el paquete dnx.lr.node define una clase para cada uno de los
nodos de la especificación de VRML. Vrml.node mientras que el paquete
contiene sólo dos clases, vrml.node.Node y vrml.node.Script, el dnx.lr.node
paquete contiene 64 clases, una para cada uno de los 54 tipos de nodo de
VRML más 10 otros líquidos realidad específica utilidad de los nodos. Clases
para cada uno de los nodos de VRML son tan útiles, que más adelante en
este libro que le llevará a través del desarrollo de un paquete similar para su
uso dentro del EAI, que actualmente carece de esas clases.

Los 10 nodos añadidos son principalmente de tipo fundición nodos (como


DNXBooleanIntConversionNode) que se ocupan de problemas de conversión
de tipo en VRML. Uno de estos problemas: En VRML no hay nodos que
pueden generar un tipo SFInt32 evento. Ninguno. Sin embargo, existen
algunos nodos que puede aceptar SFInt32 tipo de eventos. Sin tipo de
fundición nodos, usted tendría que poner en marcha un nodo utilizando
comandos de Java o JavaScript y realizar un explícito emitidos dentro de su
código. Tipo de colada nodos proporcionan "pegamento" para eludir estos
problemas.

Todos los líquidos específicos de la realidad son nodos con el prefijo "DNX" y
se puede utilizar dentro de su archivos VRML simplemente declarando el
nodo como un EXTERNPROTO y apuntando a la realidad la aplicación de
líquidos:
7

VRML 2.0 con Java CAPÍTULO 6

EXTERNPROTO DNXBooleanIntConversion [
exposedField SFInt32 trueValue
exposedField SFInt32 falseValue
eventIn SFBool set_SFBool
eventOut SFInt32 SFInt32_changed
eventIn SFInt32 set_SFInt32
eventOut SFBool SFBool_changed
]
"urn:inet:dnx.com:lrnode:dnx.lr.node.DNXBooleanIntConversionNode"

Nodos en este paquete tienen todos los métodos que permiten al usuario
para averiguar qué campos se definen de ese nodo y para obtener los
valores de los campos. Esto permite que el usuario de la API para escribir
programas que se ocupan de los tipos de nodos que se desconoce en
tiempo de compilación una potente característica.

Paquete dnx.lr.app

El paquete consiste dnx.lr.app de clases que proporcionan el marco para


una aplicación o applet de VRML. Dnx.lr.app el paquete a su vez es utilizado
para construir aplicaciones tales como el pleno funcionamiento LRBrowser
navegador VRML 2.0 que se incluye como parte de la realidad de líquidos.

Las dos clases básicas en este paquete son AppletDocument y


ApplicationDocument. A Documento encapsula una escena y los dictámenes
de la escena. A Ver muestra algunos subarbol de la escena y los procesos o
administra las aportaciones de los usuarios para que subárbol. Un programa
de realidad líquido puede leer en una escena, crear un documento para
mantener la escena, adjuntar un documento que a View3D, establecer las
View3D en un componente AWT de contenedores, y enviar un inicio ()
mensaje a los documentos. Los televidentes como ExamineViewer,
FlyViewer, y WalkViewer manejar el usuario la navegación y la interacción
con la escena.
8

VRML 2.0 con Java CAPÍTULO 6

El VRML Java Clases

Líquido realidad viene con una completa aplicación de los paquetes


estándar de VRML para Java scripts. Son paquetes en su propio nombre y en
conformidad con la especificación de VRML 2.0, aunque parece la misma
funcionalidad de las clases en el marco del dnx jerarquía. Esta segregación y
la duplicación de las clases dentro de la API de líquidos Realidad líquido
permite ajustarse a la realidad con VRML 2.0 y para ofrecer mayor
funcionalidad y extenderse dentro de su propio API al mismo tiempo.

La presencia de las clases Java estándar VRML líquido significa que la


realidad puede ser utilizado en la misma forma que lo haría para utilizar
cualquier otro conjunto de clases Java-VRML en un nodo de secuencias de
comandos a escribir su propio PROTO, por ejemplo. Vamos a examinar
brevemente el VRML clases aquí.

Paquete vrml

El paquete contiene el vrml vrml.Event, vrml.Browser, vrml.Field,


vrml.MField, vrml.ConstField, vrml.ConstMField, y vrml.BaseNode clases.

Paquete vrml.field

Vrml.field El paquete contiene una clase para cada tipo de campo se define
en la especificación de VRML-cada una de estas clases se extiende sobre el
terreno o Mfield. Este paquete contiene también una Constitución
<fieldname> clase para cada tipo de campo para mantener los campos que
no se puede modificar la Constitución-estas clases ConstField o ampliar
ConstMField.

Paquete vrml.node

Como señalamos antes, este paquete contiene sólo dos clases: vrml.Node y
vrml.Script.
Uso de la API

Con un API de este grande, no tenemos espacio para entrar en un conjunto


mucho más detalle. (Tal vez alguien escribirá un libro sobre él!) Así, en el
resto de este capítulo, vamos a caminar a través de sólo un pequeño
ejemplo de cómo escribir usando un navegador de VRML Realidad líquido,
que se muestra en el Listado 6.1. Este ejemplo es esencialmente el mismo
que el ejemplo SimpleViewer.java que viene con la distribución de líquidos
9

VRML 2.0 con Java CAPÍTULO 6

realidad. La mejora de este navegador mínimo sería un gran primer


proyecto.

Listado de 6.1 mínima del navegador de VRML escrita Uso de la API de


líquido Realidad

import dnx.lr.*;
import dnx.lr.app.*;
import java.awt.*;
import java.io.IOException;
import java.net.URL;

public class VRMLBrowser extends Frame {

protected ApplicationDocument document;


protected View3D view;

public VRMLBrowser(String title) {


super(title);
setLayout(new BorderLayout(5, 5));
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add("West", new Label("Location: ", Label.LEFT));
p.add("Center", new TextField());
add("North", p);
}

public boolean action(Event event, Object arg) {


if (event.target instanceof TextField) {
System.err.println("Loading new URL: " + arg);
try {
readScene((String) arg);
}
catch (VRMLSyntaxException e) {
System.out.println ("Invalid VRML Syntax in file: " +
arg);
return false;
}
catch (IOException e) {
System.out.println ("Unable to load: " + e);
return false;
}
return true;
}
return false;
}

public boolean handleEvent(Event event) {


if (event.id == Event.WINDOW_DESTROY) {
System.exit(0);
}
return super.handleEvent(event);
}

public Insets insets() {


10

VRML 2.0 con Java CAPÍTULO 6

return new Insets(super.insets().top + 5,


super.insets().left + 5,
super.insets().bottom + 5,
super.insets().right + 5);
}

public void readScene(String arg) throws VRMLSyntaxException,


IOException {
URL url = new URL(ApplicationDocument.getCurrentDirectory(),
arg);
Scene scene = new Scene(new ReadAction(url));
ApplicationDocument doc = new ApplicationDocument(scene);
if (view == null) {
document = doc;
view = new BrowserView3D(document);
}
else {
document.stop();
document = doc;
view = new BrowserView3D(document);
add("Center", view.getComponent());
validate();
document.start();
}
}

public static void main(String[] args) {


VRMLBrowser frame = new VRMLBrowser("Minimal VRML Browser");

if (args.length != 1) {
System.err.println("Usage: java VRMLBrowser <url>");
System.exit(0);
}

try {
frame.readScene(args[0]);
}
catch (VRMLSyntaxException e) {
System.out.println ("Invalid VRML Syntax in file: " +
args[0]);
return;
}
catch (IOException e) {
System.out.println ("Unable to load: " + e);
return;
}

frame.add("Center", frame.view.getComponent());
frame.resize(440, 340);
frame.show();

frame.document.start();
}
}
11

VRML 2.0 con Java CAPÍTULO 6

VRMLBrowser es una subclase de cuadros, ya que estamos haciendo una


aplicación independiente. En el constructor, que establecen la interfaz de
usuario, creando un campo de texto para que el usuario escriba una
dirección URL y la reserva de espacio para la vista 3-D, que creará más
tarde. Manejo de eventos se realiza con dos métodos: la acción (), para
hacer frente a las URL en el texto escrito, y handleEvent (), para permitir al
usuario a cerrar la ventana.

El verdadero trabajo se hace en readScene (), en el que crear una escena de


un objeto archivo VRML. A continuación, tenemos que crear un nuevo
documento para mantener la escena, y crear un View3D que es un punto de
vista de los documentos. El componente de la vista se agrega a la
VRMLBrowser marco, y start () se llama en el documento para iniciar el
procesamiento de líquidos Realidad eventos. Un método main () también se
brinda ya que es una aplicación independiente.

Observe que no usamos un montón de la API en este ejemplo-que es el


punto. Puede código independiente de aplicaciones Java o applets de la
misma manera siempre lo haces, entonces la mezcla líquido en unas pocas
clases de la realidad para conseguir un navegador totalmente funcional o
VRML para crear sus propias animaciones en 3-D o simulaciones sin la
participación de todos en VRML.

Tenga en cuenta que las clases se utilizan en este ejemplo, proceden de la


dnx.lr y dnx.lr.app paquetes. Si íbamos a manipular la geometría (es decir, si
esto llegara a ser un editor de VRML, más que un navegador de VRML),
habría algunos de los otros paquetes.

Todavía se necesita

La realidad de la debilidad líquido se puede resumir en una palabra: la


documentación. Si bien una lista de todas las clases y métodos se presenta
en forma de documentación javadoc (véase
http://www.dimensionx.com/products/lr/docs/javadoc-lr/packages.html),
pocos de estos han de acompañamiento descripción, y menos aún los
ejemplos de su uso. Hay poca disposición código de ejemplo escritos
utilizando la API de líquido realidad, y lo que está disponible, una vez más,
tiene escasa documentación.

Esto se ve obligada a cambiar en un futuro próximo; Dimensión X reconoce


esta debilidad y está trabajando en una amplia documentación. Y no olvides
que la realidad de líquidos se encuentra aún en la fase de prueba beta, por
lo que no pueden esperar un producto terminado.

Otra fuente de problemas es que el ICE, líquidos Realidad 3-D del motor de
12

VRML 2.0 con Java CAPÍTULO 6

renderizado, se invoca a través de los métodos de la interfaz nativa de Java.


Esta interfaz no tendrá una especificación oficial hasta el lanzamiento de la
versión 1.1 de Java Developer's Kit. Actualmente, Netscape utiliza un poco
diferentes métodos de la interfaz nativa de Java, y Microsoft tiene su propia
interfaz de métodos nativos, por lo que la realidad líquido tiene algunas
dificultades de funcionamiento dentro de estos navegadores. (Una tabla de
las incompatibilidades que puede encontrarse en http://www.
Dimensionx.com / products / lr / descarga.) Atletismo de la appletviewer, sin
embargo, funciona bien. El navegador de la situación debería mejorar con la
normalización de la interfaz nativa método en el JDK 1.1.

Sin embargo, a pesar de sus dolores de crecimiento, proporciona la


funcionalidad de la realidad líquido incomparable por cualquier otro API de
desarrollo de VRML. Merece la pena su tiempo para probarlo a cabo, una vez
que la forma de usar la API, lo encontrará muy útil y poderosa.