Sei sulla pagina 1di 12

1

VRML 2.0 con Java CAPÍTULO 3

Prototipos

Contenido CAPÍTULO 3
2

VRML 2.0 con Java CAPÍTULO 3

• Cómo Trabajan los Prototipos


• Declarar un Prototipo
• Uso de prototipos
• ¿Dónde pertenece?
• Prototipos de referencias en otros archivos
• Creación de bibliotecas de las partes

Como trabajan los prototipos

Hasta ahora sólo he mencionado que estos prototipos de actuar como nodos de
un recuadro negro en la escena. Lo que quiero decir es que una vez que usted
declara un prototipo de nodo, la definición interna no está disponible para ser
usado o en cualquier juega con la moda. De manera que usted pudiera pensar
que es como se declara una clase en Java. Hay un conjunto definido de interfaz
3

VRML 2.0 con Java CAPÍTULO 3

de métodos y variables, y no se le permite el acceso a los métodos y las


variables declaradas como privado en la clase. Ahora, sustituir la palabra
prototipo para la clase y ámbito privado en la frase anterior y ver lo que los
prototipos son y cómo funcionan (en forma simplificada de uso de la palabra).

Si vamos más analogías con el de Java, entonces usted puede considerar un


prototipo de nodo que el original archivo de clase. Se da una definición de la
conducta que se puede realizar, pero hasta que el tipo nuevo myJavaNode ()
usted no tiene una instancia de ese nodo. En VRML se puede crear un prototipo
de nombre, pero hasta que crear una instancia de declarar por su nombre (por
ejemplo, myVrmlNode ()), no aparece en la escena.

Características prototipo

Un prototipo de nodo debe seguir las mismas reglas en la escena como


cualquiera de los nodos de VRML estándar, incluidas las normas del Grupo al
que pertenece. El Grupo es muy importante porque define la clase de
comportamiento de los nodos, así como en los que puede aparecer en el
scenegraph.

Aparte de la denominación de alcance restringido, como se explica en la


siguiente sección, usted puede hacer cualquier cosa con un prototipo de nodo
que se puede hacer con un simple nodo. Si usted da un nombre con la palabra
clave DEF entonces puedes usarlo en otros lugares de la escena y también la
ruta a los eventos y de cualquier evento en el que declaró campos prototipo.

Nombre del alcance

Hay dos cuestiones alcance a mirar aquí: nodos en el interior del prototipo y la
utilización del prototipo en sí.

NOTA: Prototipo nodos suelen ser mencionados por el término abreviado proto.
4

VRML 2.0 con Java CAPÍTULO 3

La norma aplicable a los nodos con DEF declarado en el interior del prototipo es
muy simple: No hay ninguna. Un prototipo de las formas de su nombre propio
ámbito de aplicación. Hay una pared de ladrillos entre los nodos declarados y
utilizados dentro y fuera de ese prototipo. Nodos DEF declarado en el interior
del prototipo no se puede acceder desde fuera del protocolo, ni puede utilizar
cualquier nodo que ha sido declarado fuera de la proto dentro de ella y
viceversa.

Prototipo de nodo sigue utilizando normas similares a DEF / USO alcance: el uso
se limita a sólo el archivo actual de que el prototipo fue declarado en el nodo, y
sólo después de la definición original de la misma. La principal diferencia es
que usted puede hacer referencia a un prototipo declarado en otro archivo.

Declarar un Prototipo
La sintaxis de un prototipo de nodo es un poco diferente de lo que se
puede utilizar para ver. Un prototipo de declaración consta de tres
partes: el nombre, la definición sobre el terreno, y la aplicación. Si
usted piensa que una de estas partes en términos de clase de Java, que
equivalen a aproximadamente el nombre de clase, clase y forma variable de
declaraciones, y método de aplicación.

Prototipo de declaraciones comenzó por la palabra clave PROTO y, a


continuación, el nombre que usted desea llamar, por ejemplo:

PROTO figura

El ámbito y definiciones caso se adjunta a continuación, en un par de


corchetes. Se haya declarado como lo haría por escrito para ver un nodo
en el pliego de condiciones. ExposedFields para los campos y esto
significa poner el tipo de campo, nombre de campo y, a continuación, un
valor por defecto. Para eventIns y eventOuts esto requiere sólo el tipo
de campo y nombre de campo.

Para darle un ejemplo de la escritura de un prototipo, crearemos un nodo


que sustituye a la forma nodo. Todo lo que necesitamos hacer es darle un
pedazo de geometría y color. Para ello, se necesitan dos exposedFields,
uno para la geometría y uno para el color. La primera parte de la
definición se verá así:

PROTO SimpleShape [
exposedField SFNode newGeometry NULL
exposedField SFColor newColor 0 0 0
]

Decidir sobre el Sector


5

VRML 2.0 con Java CAPÍTULO 3

La primera vez que empezar a trabajar en un prototipo, usted tiene que saber
qué campos que necesite y qué tipo de declararlas. El método más sencillo
para encontrar trabajo es a qué tipo de nodo que se va a aplicar y, a
continuación, que el uso como punto de partida para los campos que desee
para proporcionar al exterior "usuario" de ese nodo.

En nuestro ejemplo, sé que me quiere dar una pieza de geometría


especializados, por lo que necesitan los campos de la forma para empezar
(porque así es como poner primitivas geométricas en el lugar). Por lo tanto,
tenemos que poner newGeometry un campo en el acceso del público a nuestro
prototipo. En el nodo de la forma, la geometría, se declara como un SFNode, lo
que significa que el campo en el prototipo de declaración debe ser del mismo
tipo. Si bien su tipo de acceso no tiene por qué ser la misma, hay algunas
restricciones. No es posible conectar un eventIn en la definición de un campo
en el interior de la aplicación, por ejemplo. Tabla 3.1, tomada de la
especificación de VRML 2.0, define las combinaciones de acceso permitido.

Nodo EXPOSEDFIEL CAMPO EVENTIN EVENTOUT


D
exposedField si si si Si
campo no Si no no
eventIn si No No
eventOut si no no No

Cuadro 3.1 Mapeo entre Prototipo Declaraciones y Campos de Aplicación

Escritura de la aplicación
Una vez que haya declarado la interfaz, es necesario escribir la
aplicación. Esta es la parte fácil. Se escribe lo mismo que cualquier
otra pieza de código VRML y se envuelve en un par de llaves. Sólo hay una
pequeña diferencia: Los campos que desea enlazar a los declarados en la
primera parte se conectan utilizando la palabra clave.
6

VRML 2.0 con Java CAPÍTULO 3


Antes de tratar de explicar esto más en este caso es el código terminado.

PROTO SimpleShape [
exposedField SFNode newGeometry NULL
exposedField SFColor newColor 0 0 0
]{
Shape {
appearance Appearance {
material Material { emissiveColor IS newColor }
}
geometry IS newGeometry
}
}

Usted puede ver cómo un campo está conectado con uno de los campos en la
declaración sólo por nombrar los dos que está atascado en el medio. Eso es
todo lo que a él.

SE puede ser usado para asociar un campo con múltiples nodos internos. Esto
es muy útil porque forma implícita una ruta entre el campo y los nodos
internos. Si el campo recibe un evento, entonces se pasa a todos los nodos que
utilizan dentro de ese evento.

Convenios

Declarar un nuevo prototipo de la misma denominación de los convenios


básicos de VRML. En general, la primera letra del nombre del prototipo es
mayúscula, mientras que la primera letra de un nombre de campo es
minúscula. Mirando hacia atrás en nuestro ejemplo, se puede ver que he
llamado el proto SimpleShape y pide los dos campos newGeometry y newColor.

La otra convención general es que los valores por defecto suelen ser los
mismos que los del campo que se está asociado.

Uso de prototipos
Una vez que haya declarado un prototipo de nodo, puede utilizarlo en el
escenario como cualquier otro nodo. Se podría crear un pequeño mundo que
tiene dos objetos en el mismo y nuestra SimpleShape prototipo de nodo
7

VRML 2.0 con Java CAPÍTULO 3


como el que se muestra en el Listado 3.1.

2.1 Una lista completa de archivos Uso de la Proto SimpleShape

#VRML V2.0 utf8


#A demo of the SimpleShape prototype use
PROTO SimpleShape [
exposedField SFNode newGeometry NULL
exposedField SFColor newColor 0 0 0
]{
Shape {
appearance Appearance {
material Material { emissiveColor IS newColor }
}
geometry IS newGeometry
}
}
Transform {
translation -2 0 0
children SimpleShape {
newColor 1 0 0
newGeometry Box {}
}
}
Transform {
translation 2 0 0
children SimpleShape {
newColor 0 0 1
newGeometry Cone {
height 1
bottomRadius 0.25
}
}
}

Eso es todo lo que hay que utilizar nodos prototipo. Como se puede ver en el
código anterior, una vez que el prototipo se declara que es utilizado como un
nodo normal. Dado que este ejemplo se basa en un nodo de forma que
podemos usarlo en cualquier lugar que una forma puede ser utilizado .

¿Dónde pertenece?

La última zona a cubrir es como clasificar a un prototipo de nodo. Ya está


familiarizado con las distintas agrupaciones de propiedad de VRML que aplica a
sus nodos. Estas agrupaciones y cómo afectan a las propiedades que se
8

VRML 2.0 con Java CAPÍTULO 3

pueden colocar en la escena. Proto nodos también tienen que encajar en este
sistema de agrupación.

La agrupación de un prototipo de nodo se determina por el primer nodo que


aparece en la aplicación de su definición. Mirando hacia atrás de nuevo en
nuestro SimpleShape ejemplo, verá que el primer nodo es un nodo de forma.
Esto significa que puede único lugar donde nuestros proto puede poner una
Forma nodo. Usted puede declarar, ya que muchos de estos nodos de nivel
superior en el prototipo como quiera, pero sólo la primera cuenta para la
determinación de la agrupación.

PRECAUCIÓN: La agrupación de un prototipo de nodo se determina por el primer nodo que aparece en la
aplicación de su definición. Esto es muy importante recordar, y es la fuente de muchos errores.

Sólo una pequeña excursión de nuevo a nombre del alcance de nuevo. DEF
porque se limita a los límites de la prototipo, debe asegurarse de que todo lo
que necesita son rutas declarado que se cerraron por última vez antes de
rizado soporte.

Prototipos Otras referencias en los archivos

A diferencia de otros elementos de VRML, puede acceder a un prototipo de


nodo declarada en otro archivo. Estos se denominan prototipos externos. La
sintaxis de la declaración y el uso de ellos es similar a la proto nodos.

La primera condición es tener un archivo con un prototipo de nodo ya declaró


en el mismo. Otra posibilidad es que el navegador ya que ha implementado en
un nodo de forma interna.

En el otro archivo en el que desea que el uso de proto, que necesita para
comenzar a declarar por los campos que su prototipo de nodo ha declarado.
Todo lo que necesitas hacer es diferente EXTERNPROTO el uso de palabras
clave en lugar de la palabra clave PROTO en la declaración. Al final de los
corchetes, se puede colocar una lista de los URL o URN para el archivo que
contiene la aplicación. Por ejemplo, digamos que nuestra vida SimpleShape
prototipo en un archivo llamado shapes.wrl:

EXTERNPROTO SimpleShape [
exposedField SFNode NULL newGeometry
exposedField SFColor newColor 0 0 0
]
9

VRML 2.0 con Java CAPÍTULO 3

"shapes.wrl # SimpleShape"

Si hay varias alternativas, puede colocar una lista separada por comas de
direcciones URL y las urnas.

También debe observar que la URL contiene un carácter # seguido por el


nombre de proto declaradas en ese archivo. Cuando se declara una URL
que debe poner # <protoname> para referirse a la particular prototipo
de nodo que le interesa, o, si no lo hace, entonces el primero en el
archivo es usado. Va a ver por qué en la siguiente sección.

Exteriores prototipo nombres no tiene que coincidir con los nombres de


la definición original de PROTO. Esta laxitud de la regla se vuelve útil
cuando tienes múltiples protos de diferentes fuentes con el mismo
nombre.

Una vez que han declarado su prototipo externo se puede usar de la


misma forma a la proto nodo de secciones anteriores. Listado 3.2
muestra cómo podemos reescribir nuestro código de anuncio 3.1.

Listado de 3.2 SimpleShape El uso de un prototipo de Exteriores

#VRML V2.0 utf8


# A demo of the SimpleShape prototype use
PROTO SimpleShape [
exposedField SFNode newGeometry NULL
exposedField SFColor newColor 0 0 0
]
"shapes.wrl#SimpleShape"

# now lets create two objects with the proto


Transform {
translation -2 0 0
children SimpleShape {
newColor 1 0 0
newGeometry Box {}
}
}

Transform {
translation 2 0 0
children SimpleShape {
newColor 0 0 1
newGeometry Cone {
height 1
10

VRML 2.0 con Java CAPÍTULO 3

bottomRadius 0.25
}
}
}
Declaraciones sobre el terreno

Cuando se le declara la EXTERNPROTO definición, no tiene que seguir el


mismo orden de la declaración que el original, sólo tiene que tener la
misma combinación de tipo de campo con el nombre de campo.

Usted ni siquiera tiene que asegurarse de que la declaración externa ha


declarado todos los campos. Sólo es necesario declarar los campos que
necesita usar. Sin embargo, los campos debe ser declarado un
subconjunto de la original.

Creación de Bibliotecas de las partes

Tal vez una de las cosas más útiles que puedes hacer con PROTO /
EXTERNPROTO partes es crear una biblioteca. Las bibliotecas convertirse
en un conjunto de piezas que usted puede reutilizar a través de diversas
escenas de una y otra vez.

En la sección anterior hablé sobre el uso de # <protoname> para


recuperar un prototipo de definición de un archivo. Lo que esto le
permite hacer es colocar muchas definiciones PROTO en el archivo y, a
continuación, una referencia a los elementos individuales de la misma,
según sea necesario. De hecho se puede tomar este último paso a la de
tener un archivo que consta sólo de PROTO definiciones.

Aparte de los evidentes beneficios de la reutilización de partes (hey,


usted es un programador orientado a objetos que no son!), Hay algunos
beneficios adicionales. La principal de ellas es la reducción del tiempo de
descarga. Al colocar un número de objetos de uso común en el archivo,
el navegador debe descargar el archivo una sola vez y luego tirar las
definiciones de la misma.

Nodos Externproto frente a "inline" Archivos


11

VRML 2.0 con Java CAPÍTULO 3

Una de las cuestiones interesantes que parece que no deja de venir es,
¿cuál es la diferencia entre un archivo de "inline" y un prototipo de nodo
externamente? Después de todo lo que puede incluir tanto en la escena
varias veces siempre que lo desee.

El mayor es una cuestión de acceso. Con un nodo externproto puede


establecer sus propios valores de diversas propiedades de los nodos
(que se convierte en una plantilla). Externprotos puede tener eventos
encaminados hacia y desde ellos, pero usted no tiene acceso a todos a
los contenidos del archivo "inline".

Un prototipo no es necesario para contener la geometría. Podría ser


simplemente un comportamiento que se conserva alrededor de su
propia geometría. "Inline" los archivos no son buenas, salvo que incluyen
geometría (y por lo general los lotes de la misma).

"Inline" nodos son mejores cuando se desea reducir el tamaño del


archivo general rompiendo abajo en partes. Dado que el acceso está
restringido, cada archivo tiene que ser autónomo en términos de
geometría y comportamientos. Por ejemplo, puede hacer un mundo
donde la tierra está en un archivo de cada edificio y se crea en su propio
archivo y, a continuación, "inline" y coloca en el archivo principal. Si
quería crear un tipo de construcción básicos que usted puede
personalizar (por ejemplo, el color o la altura), que se utiliza prototipo
nodos.
12

VRML 2.0 con Java CAPÍTULO 3

Resumen

Bueno eso es todo para la parte introductoria del libro. En este capítulo
he cubierto de cómo crear sus propios nodos y de referencia tanto
dentro como fuera del archivo original que fueron declaradas pulg

PROTO / EXTERNPROTOs son tan útil que la mayor parte del trabajo que
usted verá en el resto de este libro se basa en ellos. La mayoría de las
próximas normas que están tratando de ampliar las capacidades de
VRML 2.0 hacerlo utilizando las definiciones de los nodos prototipo, que
puede a través de una lista de referencia de la URN. En particular, la
especificación de los mundos de vida-que nos ocupamos de la parte 2 de
este libro-está muy basada en ellos.

¿Hacia dónde vamos desde aquí? En la parte siguiente, nos fijamos en la


ampliación de VRML más allá de sus sistemas fijos que hemos tratado
hasta ahora. Parte 2 se ocupa en gran medida con las diferentes APIs
para VRML 2.0 y también una serie de propuestas que están siendo
definidos. La parte 3 se ve un poco en cómo crear mejor contenido
VRML. Si usted es después de una fuerte revisión de Java entonces pasar
directamente a las partes 4 y 5 en el que muestren cómo aplicar las
muchas buenas cosas usando la combinación de Java y VRML.