Escolar Documentos
Profissional Documentos
Cultura Documentos
QUINTA UNIDAD
EVENTOS
RUTAS, INTERPOLADORES, SENSORES
OBJETIVOS
128
Sistema a Distancia
LECCIN VIII
Es cierto que un evento es emitido por un campo llamado eventOut y debe ser
recibido por un campo llamado eventIn. Pero tambin puede ocurrir que un
evento sea emitido o recibido por un exposedField que son campos de entrada
y salida.
Entonces, es de suponer, que tanto el evento que enva como el evento que
recibe, tienen que ser del mismo tipo. Por lo tanto, un evento enviado por un
eventOut de tipo SFInt32 (entero 32 bits univaluado) slo puede ser recibido
por un eventIn (o exposedField) de tipo SFInt32.
129
Sistema a Distancia
130
Sistema a Distancia
8.2 Pero cmo podemos decir que un cierto eventOut debe estar
enlazado a un cierto eventIn?
En VRML se proporciona un mecanismo llamado rutas, el cual se determina a
travs del comando ROUTE. (Debe resaltarse que no es un nodo, si no tan
solo un comando que aporta un mecanismo).
Para entenderlo mejor, por ejemplo, imaginemos que, de alguna forma, el color
de un material cambia y queremos que el evento (que es de tipo SFColor)
reciba una luz direccional, modificando as el color de la luz. Entonces los
nodos y la ruta en cuestin seran:
Este mecanismo ROUTE nos muestra que los eventos emitidos por el
exposedField diffuseColor del Material MaterialEsfera han de ser encaminados
a (TO) el exposedField color del DirectionalLight Luz.
131
Sistema a Distancia
NOTA: El observador tiene que entender que este ejemplo, tal y como est, no
tendra ningn efecto, ya que no hay nada que pueda hacer que el material
enve un evento a la luz.
Sensor de Tiempo (timesensor) es travs del mismo que contamos con un reloj
que se puede utilizar a nuestro gusto para poder medir el paso del tiempo
como motor para mover objetos de lugar, cambiar color a las cosas, variar
orientaciones, etc. que si queremos que un objeto gire alrededor de uno de sus
ejes al ir pasando el tiempo. Entonces tenemos un reloj que en cada "tic-tac"
podemos definir que nos ayude a variar en algo nuestro entorno con cierta
frecuencia un TimeSensor se basa en el reloj.
TimeSensor que hacen diferentes algunas cosas:
Sistema a Distancia
Interpolar colores.
Sistema a Distancia
key
0,
1]
keyValue [ 1 0 0, 0 1 0 ]
}
0, 0.3, 0.6,
1]
keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}
Estamos diciendo que queremos que cuando el interpolador empiece (0% del
trayecto, key = 0) nos d color rojo, KeyValue = (1 0 0). Cuando est a key =
0.3 (aproximadamente un tercio del trayecto) nos d color verde, KeyValue =
(0 1 0). Cuando est a key = 0.6 (aprox. dos tercios) nos d color azul,
KeyValue = (0 0 1) y cuando acabe (100% del trayecto, key = 1) nos d color
rojo de nuevo, KeyValue = (1 0 0). Definido un material que aplicamos a un
objeto, se puede hacer que el interpolador vaya modificando el diffuseColor,
de este material y por tanto nos vaya cambiando el color del objeto al que la
aplicamos De alguna manera tenemos que conectar el cambio de color del
interpolador al color del material.
134
Sistema a Distancia
Qu es lo que hace que el interpolador vaya pasando del valor inicial al final,
poco a poco?. Pues, el paso del tiempo del TimeSensor que ya se ha visto.
De alguna manera, debemos conectar el cambio de tiempo del TimeSensor al
cambio de tanto por uno del interpolador (es decir, el key).
Appearance
(material
DEF
materialColorCanviant
Material ())
)
Sistema a Distancia
Esto
se
consigue
enlazando
el
evento
de
salida
136
Sistema a Distancia
1]
keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}
DEF CuboColorCambiante Shape {
geometry Box { size 2 2 2 }
appearance Appearance { material DEF materialColorCambiante
Material {} }
}
DEF ZonaActiva ProximitySensor {
center 0 0 0
size 8 8 8
}
Los elementos nuevos (respecto al ejemplo del mdulo anterior) son el sensor
137
Sistema a Distancia
138
Sistema a Distancia
0, 0.3, 0.6,
1]
keyValue [ 1 0 0, 0 1 0, 0 0 1, 1 0 0]
}
DEF CuboColorCambiante Shape {
geometry Box { size 2 2 2 }
appearance Appearance { material DEF materialColorCambiante
Material {} }
}
DEF BotonVerde Transform {
translation 0 -1 7
children [
Shape { geometry Cylinder { height 0.1 radius 1 }
appearance Appearance { material Material { diffuseColor 0
10}}
}
DEF SensorBotonVerde TouchSensor { }
]
}
ROUTE motorColor.fraction_changed TO Arcoiris.set_fraction
ROUTE Arcoiris.value_changed TO materialColorCambiante .diffuseColor
ROUTE SensorBotonVerde.isActive TO motorColor.enabled
Sistema a Distancia
En principio, este sensor sirve solo sirve para cuestiones de optimizacin. As,
por ejemplo, si tenemos muchos elementos en movimiento en nuestro entorno,
el rendimiento de navegacin puede ser bastante bajo. Pero si hacemos que
los objetos solo se muevan cuando entren en nuestro campo de visin,
mejoraremos el rendimiento por que solo se mover aquello que realmente es
necesario.
140
Sistema a Distancia
Para ello tenemos el sensor de movimiento que permiten incidir sobre las
traslaciones y rotaciones de objetos directamente e individualmente, sin tener
que modificar toda la escena con las interfaces del browser.
Son tres tipos de sensores de movimiento (o "drag sensors " en Ingls):
NODE PLANESENSOR
Modifica la posicin del objeto, como si se moviese en un plano.
Sistema a Distancia
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3
}
}
}
DEF PS PlaneSensor { }
]
}
ROUTE PS.translation_changed TO Cubo.translation
Sistema a Distancia
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3 }
}
}
}
ROUTE PS.translation_changed TO Cubo.translation
NODE CYLINDERSENSOR
Para ello usamos el sensor que permite mapear los movimientos 2D del cursor
de pantalla, en rotaciones alrededor del eje Y del sistema de coordenadas del
sensor. Este sensor se activa cuando se oprime sobre el objeto activo y sin
soltar el botn del ratn, se mueve el cursor. Los movimientos del cursor se
pueden reflejar sobre el objeto mediante un ROUTE. Veamos el ejemplo del
cubo verde modificado.
Veamos que este sensor se define de forma parecida al sensor de tacto visto
en el mdulo anterior, es decir, debemos definirlo como "hermano" de los
objetos que han de ser activos.
Sistema a Distancia
}
Group {
children [
DEF Cubo Transform {
children Shape {
geometry Box { size 2 2 2 }
appearance Appearance {
material Material { diffuseColor 0 0.7 0.3 }
}
}
}
DEF CS CylinderSensor { }]
}
ROUTE CS.rotation_changed TO Cubo.rotation
NODE SPHERESENSOR
Nos permite mapear los movimientos 2D del cursor de pantalla, en rotaciones
alrededor del origen de coordenadas. El sensor se activa cuando se oprime
sobre el objeto activo y sin soltar el botn del ratn, se mueve el cursor.
Entonces, los movimientos del cursor se pueden reflejar sobre el objeto
mediante un ROUTE. Veamos el ejemplo del cubo verde modificado.
Sistema a Distancia
Comentarios
Utilitzar el exposedField SFTime touchTime del sensor de tacto.
Utilitzar el exposedField SFTime startTime del sensor de tiempo.
Solucin propuesta: boton.wrl
Ascensor.
Implementar un ascensor utilizando sensores de proximidad y de tacto.
Comentarios.
Utilizar tan solo primitivas para modelar los objetos.
Implementar dos botones dentro del ascensor (uno para subir y el otro
para bajar).
145
Sistema a Distancia
146
Sistema a Distancia
Control de un Objeto
Definir tres objetos que sirvan de conos y de sensores de movimiento en el
plano, rotacin cilndrica y rotacin esfrica para mover otro objeto que escoja.
Comentarios: Utiliza solo primitivas para modelar los objetos.
RESUMEN
En la presente unidad hemos visto un tema bastante interesante que son los
eventos y las rutas. En realidad los dos estn muy relacionados ya que para
que un objeto de la escena sufra algn cambio tiene que recibir una orden, que
es lo mismo que un mensaje que sigue una ruta especifica, por ejemplo si
deseamos que una esfera se encienda y apague tendramos que enviarle una
orden a travs de un enrutamiento con el mensaje dado indicando el sensor
que se requiera segn lo que desee que cambie.
147
Sistema a Distancia
AUTOEVALUACIN
148
Sistema a Distancia
CLAVES:
1B, 2C, 3A ,4B 5E
GLOSARIO
Planesensor: Sensor aplicado en un plano
Cylindersensor: Sensor cilndrico
Spheresensor: Sensor esferico
Route: Define una Ruta
Proximitysensor: Sensor de proximidad
Colorinterpolator: Interpolador de colores
Directionallight: Luz que solo emite rayos paralelos
Loop: Bucles repetitivos
Fan out: Abanico de apertura
Fan in: Abanico de entrada
Eventout: Mensaje o evento de salida
Eventins: Mensaje o evento de entrada
Sfcolor: Tipo de dato que emite color
149
Sistema a Distancia
LECTURA
Metodologa de desarrollo VRML
Construccin
Se puede construir de cuatro maneras:
Sistema a Distancia
Consideraciones adicionales
Espacios reales
Es importante recalcar que al disear un mundo virtual se debe efectivamente
cumplir con lo que se espera, o lo que es lo mismo, crear un espacio que se
comporte como si fuera real, es importante no perder el sentido de la frase
realidad virtual.
Techos y pisos
En la gran mayora de los mundos VRML que estn poblando la red se puede
apreciar el entrar a un universo aparentemente ingrvido, en donde un mundo
est flotando. Un piso, por muy humilde que sea, ayuda grandemente a lograr
una referencia natural para una exploracin ms elegante del mundo virtual.
Cmaras
Como ya se ha sealado, es importante el uso de cmaras para guiar al
usuario hacia los puntos de inters, o ayudarlo a encontrarse cuando se
encuentre perdido.
Compresin de archivos
Una ventaja clara de VRML es que son archivos escritos en formato de texto,
por lo que al comprimirlos se pueden reducir hasta en un 80% del original, en
general para archivos de ms de 50 Kbyte conviene realizar esta compresin la
cual se realiza por medio del formato gzip, que es el que reconocen los
browsers VRML.
http://www.jose-emilio.com/estudios/m1metodologia.htm
BIBLIOGRAFA
151
Sistema a Distancia
CAREY, Rikk; BELL, Gavin (1997) The annotated VRML 97. Reference
Manual.
http://www.bonsurf.net/chats.htm
152
Sistema a Distancia