Interacción y Animación


Behaviors

En Java3D, las modificaiones a las escenas creadas se hacen a traves de clases de tipo Behavior, dentro de las clases incluidas en la distribución de Java3D se encuentran interpoladores de rotacion, traslacion y escalamiento; asi como receptores de eventos del maouse y teclado.

Dependiedo del tipo de Behavior, es el nodo en la escena que es cambiado, en el caso de los Behaviors de movimiento, ellos cambian un TransformGroup, mientras que el interpolador de color modifica un material.

Para poder cambiar las caracteriticas del elemento del grafo requerido, los Behaviors deben recibir referencias a los nodos o componentes a modificar.


Mouse Behavior

Este grupo de clases atrapa los eventos de Mouse y los usa para rotar, trasladar y hacer zoom a los objetos en la escena; normalmente se asocian al ViewPlataform para manejar la visualizacion de la escena en forma interactiva.

Key Behavior

Esta clase atrapa los eventos del teclado para manejar la visualizacion de la escena. Al igual que los Mouse Behavior normalmente se asocia al ViewPlataform

Interpolator

La lista de interpoladores asi como la informacion que cambian se ve en la siguiente tabla:

Behavior Target Type
ColorInterpolator Material
PathInterpolator TransformGroup
PositionInterpolator TransformGroup
RotationInterpolator TransformGroup
ScaleInterpolator TransformGroup
SwitchValueInterpolator Switch
TransparencyInterpolator TransparencyAttributes


Custom Behaviors

En la mayoria de las aplicaiones uno quiere tener el control sobre los cambios que se producen en la escena, en esta caso es necesario escribir nuestros propios Behavior, ya sean estos para generar una animación, como para interactuar de forma adecuada con el usuario.

Para crear nuestros proios Behaviors se puede seguir la siguiente receta:

  1. Escribir al menos un cosntructor que reciba la referencia al objeto a cambiar.
  2. sobreescribir el método public void initialization() especificando el criterio inicial de wakeup (trigger)
  3. sobreescribir el método public void processStimulus() el cual decodifica el trigger, produce el cambio en el objeto, y dependiendo de las condiciones setea el trigger nuevamente

Criterios de Wakeup

Como se ve en la receta los Behaviors utilizan un sistema de cirterios para despertar, estos criterios están definidos en las clases que heredan de WakeupCondition. Para ver los posibles criterios aqui se presenta la herarquia de los WakeupCondition


Dentro de los mas útiles están las clases WakeupOnAWTEvent y WakeupOnElapsedTime ya que con el primero se puede manejar toda la interaccion con el ususario, y con el segundo crear animaciones.

Los constrcutores para cada uno de estos dos tipos de WakeupCondition son los siguientes:

WakeupOnAWTEvent(int AWTId)
AWTid es uno de los siguientes: KeyEvent.KEY_TYPED, KeyEvent.KEY_PRESSED, KeyEvent.KEY_RELEASED, MouseEvent.MOUSE_CLICKED, MouseEvent.MOUSE_PRESSED, MouseEvent.MOUSE_RELEASED, MouseEvent.MOUSE_MOVED, MouseEvent.MOUSE_DRAGGED, etc.
WakeupOnAWTEvent(long eventMask)
Se dan como parametro valores 'OR'eados. estos valores pueden ser: KEY_EVENT_MASK, MOUSE_EVENT_MASK, MOUSE_MOTION_EVENT_MASK, entre otros.
WakeupOnElapsedTime(long milliseconds)
Despierta en el tiempo dado.

Como usar los Behaviors

Aqui se presenta una simple receta, para el uso de los Behaviors:

  1. Preparar el SceneGraph, poniendo un TrasformGroup o los objetos necesarios
  2. Insertar el Behavior en el SceneGraph referenciado al objeto a cambiar
  3. Especificar una frontera de ejecucion
  4. Setear las capacidades (de escritura o lectura) del objeto a cambiar

A continuación se meustran dos grafos con Behaviors incluidos: El primero modifica el TransformGroup, el segundo la apariencia del Shape3D