CURSO DE VRML 2.0

 Lic. Mirta Echeverría

[email protected]

Para La Web del Programador

 

Entrega Nº 10:

Navegación y Animación

 

El Nodo Anchor :

No debemos olvidarnos que el VRML como lenguaje para la creación de escenarios virtuales, se despliega en un navegador, instrumento clave para navegar por la Web, entonces es importante que veamos cómo podemos linkear, o vincular nuestro mundo virtual con otros documentos de la Web. Esta vinculación la vamos a hacer con el Nodo Anchor que técnicamente quiere decir ancla o anclar, y nos permite conectar documentos entre sí, a través de computadoras, a través de redes, cruzando mares y continentes. El Anchor crea una unidad, un mosaico a partir de una infinidad de partes.

 

El Nodo Anchor y sus campos :

children []

MFNode

description

MDString

parameter []

MFString

url []

MFString

bboxCenter

SFVec3f

bboxSize

SFVec3f

 

El campo url es el documento con el cuál nos vamos a vincular, en Internet Explorer al pasar el mouse sobre el objeto que tiene el link veremos la típica manito con el índice extendido que nos indica un vínculo posible,y con un doble-click, saltamos a ese sitio. Desaparece el mundo virtual y da lugar a la página Web. Veamos un ejemplo usando el Nodo text y linkeamos hacia el buscador Yahoo.

 

Ejercicio Nº 24:

 #VRML V2.0 utf8

DEF TEXT Transform {

center 1.5 0 0

children [

Anchor {

url ["http:/www.yahoo.com"]

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 1 1 0

}

}

geometry Text {

string ["YAHOO"]

fontStyle FontStyle {

family ["Comic Sans MS", "SANS"]

size 2.0

justify ["CENTER"]

}

}

}

]

}

]

}

Teleporting y Linking:

Pero no solo podemos saltar a una página Web, sino que también podemos pasar de un mundo virtual a otro sin ningún espacio intermedio. En el siguiente ejercicio al linkear en los nombres de Mirta y Rodolfo pasaremos a un mundo virtual donde estamos mi marido y yo en un mundo virtual.

 

Ejercicio Nº 28:

#VRML V2.0 utf8

DEF TEXT Transform {

center 1.5 0 0

children [

Anchor {

url ["RoMir.wrl"]

children [

Shape {

appearance Appearance {

material Material {

diffuseColor 1 1 0

}

}

geometry Text {

string ["Mirta y Rodolfo"]

fontStyle FontStyle {

family ["Comic Sans MS", "SANS"]

size 2.0

justify ["CENTER"]

}

}

}

]

}

]

}

Animación:

En esta última entrega de este curso básico de VRML no podía cerrar sino con lo que más me gusta en todo Lenguaje de computación o programación y estas son las Animaciones.

Si bien el VRML es un lenguaje de tres dimensiones, según Mark Pesce en realidad es de cuatro dimensiones ya que el Tiempo sería considerada la cuarta dimensión. Y este tiempo que fluye y provoca modificaciones es fundamental para las Animaciones.

El paso del Tiempo se expresa en VRML a través del Nodo TimeSensor este Nodo es una especie de reloj cuyos campos son:

cycleInterval

SFTime

enabled

SFBool

loop

SFBool

startTime

SFTime

stopTime

SFTime

isActive

SFTime

cycleTime

SFTime

fraction_changed

SFFloat

time

SFTime

 

El evento más importante del Nodo TimeSensor es fraction_changed. El valor de este campo es un número cuyo rango va de 0 a 1, y que asociado al valor del campo cycleInterval ( intervalo de Tiempo) y al Loop( si está a TRUE) produce un bucle que repetirá la acción infinitamente. El fraction_changed vuelve a 0 y el TimeSensor se resetea y comienza a contar y repetir el bucle nuevamente.

Los mensajes enviados por fraction_changed son la llave para entender la animación en VRML.

 

Interpolación:

Para que la computadora pueda ejecutar las animaciones o movimientos, necesita la información adecuada que le permita a partir de dos puntos distintos calcular el pase de un punto a otro, a esto se llama interpolación. VRML tiene un Nodo PositionInterpolator que le permite manipular la interpolación que combinado con el TimeSensor permite enviar a la computadora la información requerida para ejecutar una animación. El Nodo tiene los siguientes campos:

key []

MFFloat

keyValue []

MFVec3f

set_fraction

MSFloat

value_changed

SFVec3f

 

El campo key va de 0 a 1, o sea esto marca el comienzo y fin de la animación, por eso necesita como mínimo dos valores y el campo keyvalue contiene la lista de los valores de las traslaciones.

Si nosostros queremos que el objeto se desplace 2 metros hacia arriba entonces los valores del campo keyvalue deben ser 0 0 0 para el primero y 0 2 0 para el segundo. Un ejemplo aclarará el uso de estos Nodos combinados con la fraction_changed. Vamos a ver mover una esfera verde en el mundo virtual.

 

Ejercicio Nº 25:

#VRML V2.0 utf8

#Primera animación

DEF PEPA Transform{

children [

Shape{

appearance Appearance {

material Material{

diffuseColor 0 1 0

}

}

geometry Sphere {}

}

]

}

DEF TIMER TimeSensor {

loop TRUE

cycleInterval 10

startTime 1 #comienzo automático

stopTime 0 #comienzo automático

}

#mueve la esfera 10 metros para arriba

DEF SPHERE_MOVE PositionInterpolator {

key [ 0, 1 ]

keyValue [ 0 0 0, 0 10 0]

}

#Primero la ruta del timer en la positioninterpolator

ROUTE TIMER.fraction_changed TO SPHERE_MOVE.set_fraction

#luego el interpolator en el transform

ROUTE SPHERE_MOVE.value_changed TO PEPA.set_translation

Aquí también usamos el DEF para crear nuestro nuestros propios procedimientos. Como esta esfera se nos escapa del mundo virtual en el siguiente ejercicio la mantendremos dentro de la pantalla.

Ejercicio Nº 26:

#VRML V2.0 utf8

#Segunda animación

DEF PEPA Transform{

children [

Shape{

appearance Appearance {

material Material{

diffuseColor 0 1 0

}

}

geometry Sphere {}

}

]

}

DEF TIMER TimeSensor {

loop TRUE

cycleInterval 10

startTime 1 #comienzo automático

stopTime 0 #comienzo automático

}

#mueve la esfera 10 metros para arriba

DEF SPHERE_MOVE PositionInterpolator {

key [ 0, 0.5, 1 ]

keyValue [ 0 0 0, 0 5 0, 0 0 0 ]

}

#Primero la ruta del timer en la positioninterpolator

ROUTE TIMER.fraction_changed TO SPHERE_MOVE.set_fraction

#luego el interpolator en el transform

ROUTE SPHERE_MOVE.value_changed TO PEPA.set_translation

 

Ahora vamos a ver otra vez a nuestro planeta tierra pero girando sobre su propio eje:

Ejercicio Nº 27:

#VRML V2.0 utf8

#tercera animación

DEF PEPA Transform{

children [

Shape{

appearance Appearance {

texture ImageTexture {

url [ "worldmap.jpg"]

}

}

geometry Sphere {}

}

]

}

DEF TIMER TimeSensor {

loop TRUE

cycleInterval 60

startTime 1 #comienzo automático

stopTime 0 #comienzo automático

}

#la esfera rota sobre sí misma

DEF SPHERE_ROTATE OrientationInterpolator {

key [ 0, 0.5, 1 ]

keyValue [ 0 1 0 0, 0 1 0 3.14, 0 1 0 6.28 ]

}

#Primero la ruta del timer en laPpositionInterpolator

ROUTE TIMER.fraction_changed TO SPHERE_ROTATE.set_fraction

#luego el interpolator en el transform

ROUTE SPHERE_ROTATE.value_changed TO PEPA.set_rotation

 

Para aquellos que les interese les seguiré enviando algunos ejercicios más complejos para que al tener acceso al código puedan hacerlos y tomarlos como referencia para crear sus propios mundos virtuales. Muchas Gracias a todos aquellos que me acompañaron. Hasta siempre.

 

Los ejercicios de esta entrega los pueden bajar de Ejercicos10.  

Entrega 1 - Entrega 2 - Entrega 3 - Entrega 4 - Entrega 5 - Entrega 6 - Entrega 7 - Entrega 8 - Entrega 9 - Entrega 10

Cualquier consulta o comentario [email protected]

www.geocities.com/SiliconValley/Garage/6472