Realidad Virtual
información adicional
jaume ferrer i rosera
1.ROUTE. Uso de sufijos y prefijos _changed y set_, eventIn, eventOut y exposedField
Consulta de Antonio Laiz:
Nos vamos al tema 14, ejemplo 3. Los ROUTE nos los
entiendo: el primero se adapta pero no se por qué sale fraction y en
donde está explicado; en el segundo value_change, de donde sale el value;
en diffuseColor le falta el set_.
Respuesta:
El ejemplo comentado corresponde al capítulo 14, ejemplo 3, del tutorial
de VRML del Dr.
Narcís Parés, que transcribo a continuación:
DEF motorColor TimeSensor{
loop TRUE
cycleInterval 5
}
DEF Arcoiris ColorInterpolator {
key [ 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 {} }
}
ROUTE motorColor.fraction_changed TO Arcoiris.set_fraction
ROUTE Arcoiris.value_changed TO materialColorCambiante.diffuseColor
En el primer ROUTE, motorColor es un nodo de tipo TimeSensor. Este nodo dispone de un campo de tipo eventOut denominado fraction_changed. Tal y como se explica en el capítulo 14 del tutorial:
Un TimeSensor da constantemente, como evento de salida (eventOut), la fracción de ciclo que ha transcurrido. Esto lo hace mediante el eventOut SFFloat fraction_changed que es un valor entre 0.0 y 1.0
Arcoiris es un nodo de tipo ColorInterpolator. Este nodo dispone de un campo de tipo eventIn denominado set_fraction. Tal y como se explica en el capítulo 14 del tutorial, enlazando el fraction_changed de un TimeSensor con el set_fraction de un ColorInterpolator se consigue que:
cada "tic-tac" del TimeSensor haga incrementar en una pequeña porción el avance del ColorInterpolator
Finalmente, en el segundo ROUTE, diffuseColor no lleva el set_ aunque es un campo que recibe información porque es de tipo exposedField, y esta modalidad de campos no llevan sufijos ni prefijos porque tanto sirven para recibir como para enviar datos (ver explicación en el capítulo 2 del tutorial).
|
Recomendación: Puesto que cuando usamos nodos tan sólo escribimos el código de aquellos campos cuyos valores necesitamos definir, para conocer cuántos campos y de qué tipo existen realmente en un nodo os recomiendo que os conectéis a la siguiente dirección, donde encontraréis las especificaciones detalladas al respecto: http://www.vrml.org/Specifications/VRML97/part1/nodesRef.html
http://www.vrml.org/Specifications/VRML97/part1/fieldsRef.html |