1 Nodos VRML Son los elementos básicos de la programación en VRML Contienen las características de un objeto (su forma, su apariencia, etc.), o la relación entre distintos objetos. Las propiedades de un nodo pueden ser afinadas hasta el detalle deseado. Permiten incorporar sonidos, panoramas de fondo, enlaces a otros mundos o a páginas Web, animaciones, etc. La sintaxis de los nodos es sensible a mayúsculas y minúsculas. Desde un punto de vista general un nodo se estructura así: Nombre { campo1 x y z campo2 x... eventIn.... eventOut.... }
2 Campos de un Nodo Son los atributos variables del nodo. Comienzan con una letra min ú scula. A continuaci ó n est á el valor que le asignamos a ese campo, que puede ser un n ú mero (o conjunto de n ú meros). Tambi é n pueden tener valores booleanos. En ocasiones, en lugar de colocar como valor un n ú mero (o conjunto de n ú meros) se coloca como campo de un nodo otro nodo.
3 EventIn - EventOut As í como los campos, la mayor í a de los nodos contienen eventos. Hay dos tipos de eventos, eventIn y eventOut. Los eventOuts son eventos emergentes (o salientes) que generan informaci ó n como el cambiar un valor o el tiempo, con un clic del rat ó n. Los eventIns son eventos entrantes que aceptan información de fuera del nodo y hacen algún proceso con dicho valor ingresado. Cada evento tiene un tipo específico de dato asociado a él.
4 Rutas de Eventos Para hacer cosas ú tiles con los eventos, nosotros necesitamos unirlos de alg ú n modo. Esta uni ó n es conocida como ROUTE (o rutas). Por ejemplo, para dirigir un touchTime eventOut a un startTime eventIn nosotros debemos dirigir el evento como sigue: ROUTE SENSOR.touchTime TO SOUND.startTime
5 Ejemplo de Nodo Box #VRML V2.0 utf8 Cosmo Worlds 1.0 #Pared amarilla semi-transparente, que emite color rojo Shape { appearance Appearance { material Material { diffuseColor 1 1 0 emissiveColor 1 0 0 transparency 0.5 } geometry Box {size 2.5 2.5 0.3} }
6 Nodo InLine Aqu í se hace la llamada a un archivo llamado silla.wrl Inline_silla Transform { #ubicaci ó n del objeto translation -5.15 -13.29 -28.52 children [ Inline { url "silla.wrl “ } ] }
7 Nodo Anchor Anchor { children […] description "…“ parameter […] url […] bboxCenter 0 0 0 bboxSize -1 -1 -1 } url //..otrapagina.html url //paginaconmundoVRML.html#Camara_Inicial url /#Camara_IrComp
8 Nodo Texto VRML V2.0 utf8 Cosmo Worlds 1.0 #en este ejemplo definiremos un texto y sus atributos Shape {appearance Appearance { material Material { } } #hasta aqu í se defini ó la apariencia del texto #y es la que existe por defecto geometry Text { string ["Esta es la primera fila de texto", "esta es la segunda fila", "etc."] fontStyle FontStyle { family "SERIF", style "BOLD", size 1, spacing 1 } } }
9 Interpolador de Orientación OrientationInterpolator{ set_fraction key [0..1] keyValue [] value_changed }
10 Interpolador de Posición PositionInterpolator{ set_fraction key [0..1] keyValue [] value_changed }
11 Animación con Interpoladores
12 Nodo JavaScript DEF AbrirCerrarPuertaMadera Script { //{{FIELDS AND EVENTS eventIn SFTime touchTime eventOut MFRotation posicionPuertaMadera field SFInt32 estadoPuertaMadera 1 field MFRotation abierta [ a, b ] field MFRotation cerrada [ b, a ] //}} function touchTime(value, time) { if (estadoPuertaMadera == 1) {posicionPuertaMadera = abierta;} else {posicionPuertaMadera = cerrada; } estadoPuertaMadera = 3 - estadoPuertaMadera; }
13 ROUTE TouchPuertaMadera.touchTime TO AbrirCerrarPuertaMadera.touchTime ROUTE TouchPuertaMadera.touchTime TO TimePuertaMadera.set_startTime ROUTE TimePuertaMadera.fraction_changed TO OrientationPuertaMadera.set_fraction ROUTE AbrirCerrarPuertaMadera.posicionPuertaMadera TO OrientationPuertaMadera.set_keyValue ROUTE OrientationPuertaMadera.value_changed TO puertaYManija.set_rotation