-
Ayuda vrml
Buenas. Ando aprendiendo vrml y me salió un trabajo en el cual necesito tener un objeto oculto al pasar el mouse por otro objeto (visible) debe aparece el objeto escondido.
Agradecería cualquier ayuda que me brinden. Gracias de antemano por leer este mensajes.
-
Para lograr que un objeto aparezca al pasar el mouse sobre otro en VRML, necesitas usar sensores y rutas ROUTE. La solución más directa utiliza un TouchSensor en el objeto visible y un VisibilitySensor o control de la propiedad set_bind de un Switch para el objeto oculto.
Primero, define el objeto visible (por ejemplo, un cubo) y añádele un TouchSensor como hijo. Este sensor detectará cuando el puntero pase sobre el objeto.
Luego, define el objeto que quieres ocultar inicialmente. Envuelve este objeto en un nodo Switch. El nodo Switch tiene un campo llamado whichChoice que controla qué hijo se muestra. Un valor de -1 oculta todos los hijos, y un valor de 0 muestra el primer hijo. Define el Switch con whichChoice inicial en -1 para que el objeto esté oculto.
Ahora, conecta los eventos. El TouchSensor envía un evento isOver cuando el puntero entra o sale del objeto. Necesitas enrutar este evento para cambiar el campo whichChoice del nodo Switch.
Crea una ruta ROUTE desde el TouchSensor.isOver hasta el Switch.set_whichChoice. Sin embargo, el evento isOver es de tipo booleano (TRUE o FALSE), y whichChoice espera un entero. Para convertir esto, puedes usar un nodo Script de JavaScript o, de forma más sencilla, predefinir dos rutas condicionales usando un BooleanToggle o un IntegerSequencer, pero la opción más compatible es un Script simple.
Dentro del Script, define un campo de entrada SFBool (para recibir isOver) y un campo de salida SFInt32 (para enviar el valor a whichChoice). En la función de callback, si isOver es TRUE, envía 0 para mostrar el objeto; si es FALSE, envía -1 para ocultarlo.
Finalmente, conecta todo: ROUTE del TouchSensor.isOver al Script.isOver, y otra ROUTE del Script.choiceOut al Switch.set_whichChoice.
Recuerda que en VRML los nombres de los nodos deben referenciarse correctamente con DEF para definir y USE para reutilizar. Prueba tu mundo en un visor actual como view3dscene o Instant Reality Player para asegurar la funcionalidad.