30 de Junio de 2001 Vol.2 No.2


Asignación de Comportamiento Complejo
a Mundos Virtuales VRML Utilizando C++

Rolando Quintero Téllez.

J. Matías Alvarado Mentado.

Gustavo Núñez Esquer.

Palabras Clave : Comportamient, VRML, C++, Realidad Virtual, EasyVRML, .

Resumen

La animación de mundos tridimensionales virtuales en VRML se hace mediante paso de eventos entre nodos en el mundo virtual. Tal animación tiene la limitación de ser fija y predeterminada, sin cambios. Animaciones complejas se realizan a través de scripts de VRML los cuales contienen programas escritos en otro lenguaje de programación. Sin embargo, la labor de programar e integrar el script al mundo virtual, actualmente, no es sencilla ni cómoda para el usuario. En este trabajo se describe la definición, diseño e implementación de los esquemas de asignación de comportamiento en C++ sobre mundos VRML, analizando las peculiaridades de interacción entre ambos lenguajes. De manera complementaria se describe una implementación de ello en la herramienta EASYvrml, la cual facilita el trabajo de asignar comportamiento complejo utilizando C++ a mundos descritos en VRML.

[English]

Artículo

Realidad Virtual

El concepto de realidad virtual surge en 1965 cuando Ivan Sutherland (hoy miembro de Sun Microsystems Laboratories) publicó un artículo titulado "The Ultimate Display", en el cual describe las ideas básicas del concepto de realidad virtual. La realidad virtual se puede definir como:

"Una combinación de diversas tecnologías e interfaces que permite a uno o más usuarios interactuar, en tiempo real, con un entorno o mundo dinámico tridimensional generado por computadora" 1

Otros la definen como:

"La simulación de medios ambientes, reales o artificiales, y de los sentidos del hombre por computadora, de tal manera que se busca proporcionar al que participa la sensación de que este ambiente realmente existe" 36

La realidad virtual permite un nuevo modo de interacción entre el hombre y las computadoras

Las características básicas de un sistema de realidad virtual son las siguientes 7a810

  • Tridimensionalidad
    Tiene que ver directamente con la estimulación de los sentidos del usuario, principalmente la visión, para dar forma al espacio virtual. Los componentes del mundo virtual se muestran al usuario en las tres dimensiones del mundo real. En lo que se refiere a los sonidos se tienen efectos estereofónicos (dirección).
  • Navegación
    Es la característica que permite al usuario moverse independientemente dentro del mundo. Las restricciones para este aspecto las especifica quien desarrolla el software. Puede permitir varios grados de libertad, si se puede volar o no, caminar, nadar, etcétera. El otro punto importante de la navegación es la posición del observador, es decir, el lugar desde donde el usuario ve el mundo virtual.
  • Interacción
    Permite al usuario manipular el curso de la acción dentro de una aplicación de realidad virtual, permitiendo que el sistema responda a los estímulos de la persona que la utiliza. Otro aspecto de la interacción es la semántica del ambiente, es decir, las reglas de cómo los componentes del mundo virtual interactúan con el usuario para intercambiar información
  • Inmersión
    Significa bloquear al usuario de toda distracción y enfocarse sólo en la información u operación sobre la cual se trabaja. Posee dos atributos importantes. El primero de ellos es la habilidad para enfocar la atención del usuario. El segundo es el que convierte una base de datos en experiencias, estimulando de esta manera el sistema natural de aprendizaje humano (las experiencias personales).

1.2. El Lenguaje VRML

VRML es un lenguaje para describir objetos y mundos 3D interactivos. Está diseñado para usarse sobre Internet, intranets, y sistemas locales. Los mundos VRML pueden transmitirse e inter-relacionarse a través del WWW y visualizarse mediante algún navegador o browser VRML que se conecta con el browser WWW a través de un API (Figura 1).

figura 1. Esquema de acceso para satisfacer los siguientes requerimientos [5]:

 

VRML ha sido diseñado para satisfacer los siguientes requerimientos

  • Autoría
    Permite el desarrollo de programas de computadora, capaces de crear, editar y mantener archivos VRML, así como programas de conversión de otros formatos de archivos 3D, comúnmente utilizados, a archivos VRML.
  • Composición
    Proporciona la posibilidad de utilizar y combinar objetos 3D dinámicos dentro de un mundo VRML y así permitir la reusabilidad.
  • Extensión
    Proporciona la posibilidad de agregar nuevos tipos de objetos no definidos explícitamente en VRML.
  • Capacidad de Implementación
    Permite implementar sobre un amplio rango de sistemas.

  • Desempeño
    Enfatiza funcionamiento interactivo y escalable sobre una amplia variedad de plataformas de cómputo.
  • Escalabilidad
    Permite la descripción de mundos tridimensionales dinámicos arbitrariamente grandes.

Conceptualmente, cada programa VRML es un espacio 3D que contiene objetos que pueden ser modificados dinámicamente a través de diversos mecanismos. La semántica de VRML describe un comportamiento funcional abstracto, basado en el tiempo.

En la sección 2 se presenta una panorámica acerca de lo que es asignación de comportamiento en mundos o escenarios virtuales, en la cual, además de algunos conceptos, se presenta una clasificación de los comportamientos de acuerdo a las características que estos presentan. En la sección 3 se aborda la asignación de comportamientos descritos en C++, así como los esquemas utilizados para llevar a cabo esto. Los requisitos y las restricciones que presentan los esquemas planteados se presentan en la sección 4. En la sección 5 se describe brevemente la herramienta EasyVRML, en la cual es aplicado lo descrito en este artículo. Finalmente, en la sección 6 se describen las conclusiones de este trabajo, así como el trabajo que queda para un futuro.

2. Comportamiento en Mundos Virtuales

El término comportamiento se refiere a la modificación del estado de los objetos dentro de un escenario virtual, en respuesta a alguna acción del usuario o al cambio de algún otro objeto en la escena. Este cambio de estado ocurre cuando cambia alguno de los atributos del objeto, por ejemplo la posición (translación), el tamaño (escala), la orientación (rotación) o su apariencia.

En VRML, el comportamiento se controla (lleva a cabo) mediante eventos. Un evento es la generación de un mensaje y su envío de un nodo a otro. Algunos nodos VRML generan eventos en respuesta a cambios en el ambiente o interacción del usuario. El direccionamiento de eventos proporciona a los autores de los mundos un mecanismo separado de la jerarquía del grafo de la escena, a través del cual estos eventos pueden ser propagados para efectuar cambios en otros nodos.

Una vez generados, los eventos son enviados a sus destinos para ser procesados por el nodo receptor. Este proceso puede cambiar el estado de un nodo, generar eventos adicionales o cambiar la estructura del grafo de la escena.

El comportamiento puede ser tan sencillo como el encender una luz con un click del ratón, o tan complejo como el cálculo de la trayectoria de un misil teleguiado. Para fines de este trabajo se definen dos tipos de comportamiento: simple y complejo.

2.1. Comportamiento Simple

El comportamiento simple es aquel en el cual los cambios en el estado de los objetos dependen exclusivamente de eventos internos generados por nodos descritos dentro del programa VRML, sin la intervención de ningún lenguaje ajeno a VRML. Se puede decir que éste tipo de comportamiento es propio de VRML.

La propagación de los eventos se realiza enrutando o dirigiendo los eventos de un nodo a otro(s). De esta forma un solo evento puede generar lo que se conoce como "cascada de eventos", la cual va generando respuestas o cambios en los nodos a los que se va dirigiendo.

Dado que el comportamiento simple está restringido a dirigir datos de un nodo a otro, mediante instrucciones dadas sólo en VRML, se tienen limitaciones como las siguientes: no es posible mediante este mecanismo determinar si una puerta está cerrada o abierta, o mover un objeto a lo largo de una trayectoria definida por una ecuación matemática. Para llevar a cabo éstas u otras operaciones más complejas, se debe utilizar un lenguaje de programación de propósito general.

2.2. Comportamiento Complejo

Se entiende por comportamiento complejo en un mundo VRML, aquel en el cual los cambios en el estado de los objetos dependen de un programa escrito en un lenguaje ajeno a VRML.

Los cambios dinámicos en la escena pueden ser estimulados por las acciones programadas en un script, paso de mensajes, comandos del usuario o protocolos de comportamiento.4a Esto brinda la posibilidad de interacción con otros lenguajes (específicamente los lenguajes Java y Javascript). Para ello se emplea el nodo Script. De esta manera es posible asignar comportamientos más elaborados como se describe en lo sucesivo.

2.3. Asignación de Comportamientos

Los esquemas de asignación de comportamiento se clasifican de acuerdo a las siguientes dimensiones: ubicación, acceso a datos y comunicación. La intersección de las dimensiones especifica un tipo particular de esquema de asignación.

De acuerdo a la Figura 1.3, los diversos tipos de esquemas de asignación de comportamiento pueden verse como puntos en el espacio, formados por tres elementos: tipo de ubicación, tipo de comunicación y tipo de acceso a datos.

2.3.1. Ubicación

Se refiere a la localización física del código que define el comportamiento, y puede ser:

  • Local El código de comportamiento se ejecuta en la máquina donde ésta la escena VRML. No se necesita acceder a la red para llevar a cabo la comunicación entre VRML y el lenguaje de comportamiento.
  • Remota El código de comportamiento se puede estar ejecutando en cualquier máquina en la red (incluyendo la máquina local). La localización física de la definición del comportamiento es indiferente, ya que se utiliza el mecanismo de Sockets para llevar acabo la comunicación.

2.3.2. Acceso a Datos

Se refiere a la forma como se leen y/o modifican los valores de los campos de los nodos que son afectados por el script, y puede ser de dos tipos:

  • Indirecto (Basado en Eventos)
    En este tipo de acceso, la comunicación entre el script y los demás nodos se hace exclusivamente a través del paso de eventos. Cuando el valor de un campo se modifica (ya sea por una acción del usuario o por un evento de entrada), se genera automáticamente un evento de salida, produciéndose los efectos en el escenario, de acuerdo a los valores de los campos modificados obtenidos del evento de salida. Este es el esquema utilizado por VRML para la asignación de comportamiento simple.
  • Directo (Basado en Acceso a Campos)
    En este tipo de acceso, la comunicación entre los nodos se realiza cambiando directamente los valores de los campos, desde el programa de comportamiento, pasando el nodo por referencia al programa. El script es invocado cuando se produce un evento de entrada. En el programa se tiene una referencia al nodo que se va a afectar, la cual se utiliza para modificarlo. Este es el esquema utilizado para la asignación de comportamiento complejo principalmente.

2.3.3. Comunicación

Se refiere a la forma como se realizan el envío o la recepción de datos de la escena VRML al programa de comportamiento:

  • Dependiente
    Este modelo de comunicación consiste en enviar un mensaje, desde el escenario VRML al programa de comportamiento para actualizar los valores de los objetos dentro del escenario. Esto significa que el programa de comportamiento se comporta como esclavo del escenario (sección 3.3.1.)
  • Independiente
    Este modelo consiste, a diferencia del modelo Dependiente, en un programa de comportamiento que realiza una tarea determinada y envía datos al escenario (para que éste actualice el estado de los objetos dentro de él), de acuerdo al tiempo que tenga ocioso en su ejecución (sección 3.3.2.)
  • Dúplex
    Es una mezcla de los dos modelos anteriores. El esquema de comunicación dúplex es más completo y complejo (sección 3.3.3.)

2.4. Soporte de VRML para Java

Java añade todas las posibilidades de programación, además de brindar un acceso casi transparente a la red, haciendo a VRML completamente funcional y portable 4b La característica más importante de Java para ser usado como lenguaje de implementación de los scripts. es su independencia de plataforma, y ello es congruente con la filosofía de VRML y la de WWW.

VRML brinda el soporte para el uso de Java como lenguaje de comportamiento: Esto se realiza utilizando el API para este lenguaje, en donde se definen todas las clases para acceder a los nodos de VRML Las interfaces entre VRML y Java se llevan a cabo por medio del nodo Script, un manejador de eventos, convención para nombres DEF/USE, y ROUTEs, conectando los nodos y los campos en la escena.

2.5. Soporte de VRML para otros lenguajes

Otros lenguajes de programación, en especial como C++, no son soportados de manera directa por VRML para describir comportamientos. Por lo que para comunicar VRML con cualquier otro lenguaje que no sea Java o Javascript, se deben definir los mecanismos de interfaz entre ambos lenguajes.

En este trabajo se propone un esquema genérico de comunicación entre VRML y C++, que puede extenderse a otros lenguajes orientados a objetos. El esquema genérico de comunicación incluye la especificación de un protocolo llamado PAC-R (Protocolo para Asignación de Comportamiento Remoto), además de los modelos de sincronización entre VRML y C++.

3. Asignación de comportamiento utilizando C++

C++ es uno de los lenguajes orientados a objetos, cuya utilización está más extendida. Muchos programadores gustan de escribir programas en C++, sobre todo para utilizar directamente el hardware de la computadora (por ejemplo el Joystick, guantes de RV, cascos, etcétera). Además, existen muchas aplicaciones y bibliotecas escritas en este lenguaje. Muchas de éstas pueden utilizarse para generar escenas VRML más complejas.

Por ejemplo, Langage d'Agents Logiciel Objet (LALO),7b es un lenguaje de programación de agentes, en el cual se pueden programar agentes de software que realicen distintas tareas de forma inteligente, utilizando para ello las funciones de inferencia que proporcionan las bibliotecas de LALO. Al compilar el programa fuente LALO, se genera como resultado el código C++, el cual puede ser utilizado para describir el comportamiento de algún objeto en una escena virtual.

Dicha vinculación es lo que se conoce como "asignación de comportamiento complejo". Es decir, asignar comportamiento es vincular un nodo del escenario VRML (o alguno de sus campos) con un objeto (método o atributo) de un programa C++ o de cualquier otro lenguaje.

Hasta donde se sabe, no existe un esquema general de asignación de comportamiento descrito en C++ a mundos VRML. Sin embargo, este lenguaje es utilizado por muchos programadores, dado que existen muchas aplicaciones y bibliotecas escritas en él, luego es deseable que VRML utilice las posibilidades que le brinda. Se propone, como se mencionó anteriormente, un esquema general para vincular código C++ con un mundo VRML.


figura 2. Esquema de comunicación entre C++ y VRML empleando Java como puente.


Dicho esquema establece el empleo de Java como puente entre los lenguajes, vinculando, mediante el mecanismo de Sockets, el comportamiento descrito por un programa C++, funcionando en su plataforma nativa, con un mundo VRML, independiente de plataforma (Figura 2).

La utilización de C++ como lenguaje de comportamiento, está restringida al comportamiento remoto, pudiendo aplicarse en cualquiera de los modelos de comunicación. El esquema de acceso a datos que utilice depende del programa Java, que sirve como puente entre C++ y VRML.

3.1. Problemática de la asignación de comportamiento en C++

Los browsers de WWW y VRML están diseñados para utilizar Java (o JavaScript), con el fin de realizar cálculos complicados (comportamiento complejo). Cuando se requiere ejecutar un programa en Java, la Java Virtual Machine (JVM)13 (instalada en el browser) solamente "carga" el código de éste en memoria y genera un nuevo hilo de ejecución, lo cual no representa ninguna dificultad para la JVM, puesto que Java soporta directamente esta construcción y el código Java es independiente de la plataforma.

Cuando la JVM necesita ejecutar un programa escrito en C++ (código nativo), debe utilizar la Java Native Interface (JNI).12 Esta interfaz establece el mecanismo a través del cual un programa Java puede realizar llamadas a métodos nativos, y viceversa. Sin embargo, este esquema sólo puede ser utilizado para aplicaciones stand-alone, y no en aplicaciones para la WEB (applets y/o scripts), principalmente por dos aspectos:

  • Seguridad: no se permite que programas Java (applets o scripts) realicen llamados a métodos nativos 11, a menos que se proporcione el permiso explícitamente.
  • Plataforma: aunque los programas Java pudiesen realizar tales llamados, éstos sólo pueden ejecutarse en la misma máquina en la que funciona el método nativo.

En la propuesta que se presenta se tiene una restricción en cuanto a la plataforma, ya que el programa que describe el comportamiento sólo se puede ejecutar en el servidor. Sin embargo, este programa puede comunicarse con programas que se encuentren fuera de la computadora donde se ejecuta, ya que no tiene restricciones de comunicación*a

EasyVRML, además de brindar una herramienta para facilitar la tarea de asignación de comportamiento, proporciona un mecanismo genérico para vincular código C++ con un mundo VRML. Dicho mecanismo se basa en dos aspectos:

  • El empleo del esquema de comportamiento remoto para la comunicación entre VRML y C++.
  • Los modelos de comunicación entre el programa C++ y el escenario VRML (dependiente, independiente y dúplex).

3.2. Esquema de comportamiento remoto en C++

En VRML, la asignación de comportamiento mediante Java se hace de manera local. Es decir, el programa Java es cargado y ejecutado como un nuevo hilo en la aplicación. Para esto se emplea el VRML Java API.

En2 se propone un esquema de asignación de comportamiento remoto descrito en Java. Esto se hace mediante un programa Java que interactúa con VRML, y que sólo se encarga de comunicarse por medio de un Socket con otro programa Java, el cual es el que describe el comportamiento.

Al igual que el esquema de comportamiento remoto en Java, su contraparte en C++ utiliza un programa Java como interfaz entre C++ y VRML. Este programa manipula los campos de los nodos del escenario, asignando a éstos los valores provenientes de un Socket, el cual está conectado con él o los programas C++ que se están ejecutando en otra u otras computadoras de la red y que describen el comportamiento del escenario.

En este esquema se proponen tres niveles de interacción, entre la computadora donde se ejecuta el escenario y la computadora donde se ejecuta el comportamiento (Figura 3):

figura 3. Esquema de comunicación entre VRML y C++

  • Nivel de Aplicación
    En este nivel se encuentran las aplicaciones a las cuales se desea comunicar:
    Escenario VRML. Es el mundo virtual al que se desea asignar el comportamiento. Se encarga de la interacción con el usuario y de la visualización del escenario virtual. ü Aplicación C++. Es el programa o biblioteca que describe el comportamiento que se quiere asignar al escenario virtual.
  • Nivel de Interfaz
    En este nivel se encuentran los programas que sirven como interfaz para la comunicación. Éstos se encargan de leer o escribir datos desde el Nivel de Aplicación, procesarlos para enviarlos o recibirlos desde el Nivel de Comunicación. En este nivel se realiza la gestión de la información, llevando el control de la lógica de la comunicación entre C++ y VRML. Script Java. Este programa se encarga de leer y/o modificar el estado de los nodos en el escenario VRML. Procesa los eventos generados en el escenario virtual y realiza la actualización del estado de los objetos en el escenario. ü Script C++. Este código se encarga de leer y/o modificar los datos en la aplicación C++, de la cual se obtiene el comportamiento. Para ello se añade al código de la aplicación como una extensión de éste.
  • Nivel de Comunicación
    En este nivel se homogeneiza el formato de los datos, al utilizar Sockets para enviarlos de una computadora a otra. Esto es necesario debido a que como el código compilado de C++ es dependiente de la plataforma, la alineación de los bits puede ser diferente a la que se necesita.

    Socket Java.
    Se encarga del envío y recepción de datos desde las computadoras remotas. Implementa el PAC-R *b, utilizando las clases VRML extendidas, propuestas en [2]. También se encarga de la conversión de los tipos de datos, para que sean compatibles con VRML.

    Socket C++.
    Se encarga del envío y recepción de datos desde la máquina donde se está ejecutando el escenario virtual. Implementa el PAC-R y realiza las conversiones de tipos de datos VRML a C++.

Las aplicaciones que describen el comportamiento se ejecutan en máquinas remotas, mientras que el escenario VRML se ejecuta en la máquina local. Sin embargo, nada impide que en esta última se ejecute también una o varias aplicaciones de comportamiento, ya que es válido crear un Socket a la máquina local.

3.3. Modelos de comunicación

Además de los procedimientos de comunicación, se debe considerar de qué manera se pueden sincronizar los procesos involucrados (el comportamiento y la visualización) en el escenario virtual.

Se supone que las aplicaciones C++, de las cuales se pretende obtener el comportamiento, fueron escritas sin tomar en cuenta su aplicación conjunta con VRML. Por ejemplo, se puede utilizar VRML para la visualización de los resultados de algún cálculo, utilizando una biblioteca de funciones científicas, que realizan algún cálculo específico y que no requieren de un sistema de visualización para su funcionamiento.

Para establecer la forma en la cual el escenario virtual interactúa con el programa que describe el comportamiento, se plantean tres modelos de comunicación entre VRML y C++ (los cuales se utilizan dependiendo de la funcionalidad que se desee dar a la aplicación): el modelo de comportamiento dependiente, el independiente y el dúplex.

3.3.1. Modelo Dependiente

El modelo dependiente consiste en que el escenario VRML emplea a C++ como extensión de su funcionalidad, realizando llamados a funciones definidas por C++. Esto significa que el programa de comportamiento se comporta como esclavo del escenario. Empleando los conceptos de la arquitectura cliente/servidor el programa C++, el cual se está ejecutando en la computadora remota, será un servidor de cálculos y VRML será su cliente.

Se le denomina dependiente porque el intercambio de información entre C++ y VRML depende de las solicitudes que este último realice.

En el escenario se genera un evento, el cual es enviado al script, el que lo procesa y envía una solicitud al servidor de C++. Éste realiza el llamado a algún método o función C++ y envía el valor de regreso al escenario VRML.

Este modelo está formado por las siguientes entidades (Figura 4):

figura 4. Modelo de comunicación dependiente.

  • VRML
    Representa al browser, ejecutando un programa VRML. Se encarga de la interfaz con el usuario, generación de eventos, etcétera.
  • Script Java (Cliente)
    Manipula los valores de los campos en los nodos del escenario VRML. Además, se comunica con el Script C++, empleando un Socket.
  • Script C++ (Servidor)
    Atiende las peticiones del Script Java, realizando llamados a rutinas de la Aplicación C++.
  • Aplicación C++
    Es el código C++, que describe el comportamiento. Puede ser una aplicación específica para el escenario virtual o alguna biblioteca de uso general.

En este modelo, el programa de comportamiento está dedicado a realizar los cálculos que se requieran en el escenario. Por ejemplo, en un juego de billar se enviará una solicitud desde el escenario al programa C++, para que calcule la trayectoria de una bola cada vez que ésta sea golpeada (ya sea por el taco o por otra bola). En este caso el programa C++ no realiza otra tarea, mas que atender las peticiones provenientes del escenario.

La principal ventaja que tiene este esquema es que el escenario se encuentra siempre actualizado. Es éste el que lleva el control de los tiempos y los eventos. También tiene la ventaja de ser más sencillo, pues es el esquema "natural" de VRML para asignar comportamiento: en el escenario VRML se hacen llamados a funciones o métodos escritos en lenguaje Java.

3.3.2. Modelo Independiente

Este modelo consiste en un programa que realiza una tarea determinada y envía datos al escenario (para que éste actualice el estado de los objetos dentro de él) cada determinado tiempo, de acuerdo a algunos criterios.

A diferencia del modelo dependiente, el programa de comportamiento no tiene que esperar que el escenario virtual envíe las peticiones de actualización necesarias. Por ejemplo, un programa C++ que monitorea el estado de un guante de RV, envía los valores del estado de éste al escenario, en el momento en que éstos cambian.

Este modelo está formado por cuatro entidades (Figura 5):

figura 5. Modelo de comunicación independiente.

  • VRML
  • Script Java (Actuador)
    Es el código que implementa un hilo, el cual atiende las solicitudes de actualización provenientes del Script C++. Este código manipula los valores de los campos en los nodos del escenario VRML.
  • Cliente C++ (Controlador)
    Este código tiene como formas de trabajo:

    A. Semi-asincrona: El programa Script C++ envía, cada cierto tiempo, una solicitud de actualización a la Aplicación C++ para que ésta le proporcione los valores necesarios para la actualización del escenario.

    B. Asincrona: La Aplicación C++ envía los valores de actualización al escenario (a través del Script C++), el algún momento en el que tiene tiempo ocioso.


  • Aplicación C++ Este esquema tiene la ventaja de que se pueden utilizar programas que trabajan en forma independiente de VRML. Su elaboración es más compleja que en el caso del esquema dependiente, ya que se requiere considerar otros aspectos complejos de programación, tales como programación multihilos (o multiproceso en el caso de sistemas que no tengan soporte de hilos).

3.3.3. Modelo Dúplex

El modelo de comportamiento dúplex es el más completo y el más complejo al mismo tiempo, ya que es una mezcla de los dos modelos anteriores. Consiste en que tanto el escenario VRML, como el programa C++ de comportamiento, envían y atienden peticiones de actualización y cálculo (Figura 6).

Por ejemplo, en un juego de batalla aérea, VRML se encarga de la visualización de los aviones y de la interfaz con el usuario (el control de los aviones), enviando mensajes al programa de comportamiento para que realice los cálculos de las trayectorias de sus balas o misiles.

Sin embargo, el programa C++ puede controlar los movimientos del adversario mediante un agente que se encargue de ello, que responda a los movimientos del usuario. En este caso VRML envía los mensajes del control del usuario y recibe las actualizaciones de las naves.

Este esquema tiene como principal ventaja la versatilidad para hacer interactuar a los objetos del escenario VRML, con el programa de comportamiento. Esto aumenta las posibilidades para hacer escenarios más realistas y atractivos para los usuarios, pues brinda un elemento muy importante en la Realidad Virtual: la interacción.

figura 6. Modelo de comunicación Dúplex

4. Requisitos y restricciones del comportamiento en C++

La asignación de comportamiento en C++ tiene algunas restricciones. La más importante tiene que ver con el ámbito de los objetos (scope) y su tiempo de vida. Por ejemplo, existen objetos temporales cuyo ámbito es local a la función en la que fueron declarados. Si se vincula este objeto con un nodo en el escenario, al terminar el ámbito del objeto el vínculo creado quedará roto, creando con esto una inconsistencia.

Para solventar este problema se deben vincular los nodos de VRML con objetos C++, cuyo ámbito sea global al programa o a la clase de la que se toma el comportamiento.

Las demás limitaciones del comportamiento en C++ las impone el esquema de comunicación de comportamiento remoto. En primer lugar, el equipo en el cual está ejecutándose el programa que describe el comportamiento, debe soportar el uso de Sockets, ya que sin éstos los esquemas y modelos planteados no pueden funcionar.

Por otro lado, se debe configurar el browser con los permisos de acceso a red, ya que de otra forma no se tienen los privilegios de acceso a ella desde el script. Esto puede evitarse empleando un servidor de acceso a red (proxy), el cual está instalado en el mismo equipo del cual se descarga el escenario y proporciona al escenario una forma segura de acceso a la red (Figura 7). Sin embargo, esta solución queda fuera de los alcances de este trabajo.

figura 7. Arquitectura del Servidor de Acceso a Red.

5.EasyVRML

EasyVRMLes un ambiente CASE, orientado a la generación de mundos virtuales con comportamiento complejo. Es una herramienta que da soporte en la etapa final del desarrollo de mundos virtuales con comportamientos complejos, ya que permite llevar a cabo la asignación de este tipo de comportamientos descritos en Java y/o C++, a componentes de mundos virtuales creados con VRML, todo ello a través de un lenguaje visual basado en iconos. Además, proporciona mecanismos para soportar comportamientos complejos, locales y remotos, descritos en estos lenguajes.

EasyVRML propone también un esquema genérico de comunicación entre VRML y cualquier lenguaje de programación orientada a objetos. La versión actual considera sólo a C++ y Java, pero puede extenderse a otros. El esquema genérico de comunicación incluye la especificación de un protocolo llamado PAC-R (Protocolo para Asignación de Comportamiento Remoto), además de los modelos de sincronización entre VRML y el otro lenguaje.

Esta herramienta busca dar solución a los problemas inherentes a la generación de aplicaciones basadas en VRML y C++, para la generación de entornos virtuales con comportamientos complejos, a saber:

  • La dificultad en el aprendizaje de los esquemas actuales, para agregar comportamiento complejo descrito en Java u otros lenguajes de programación, a objetos definidos en VRML,
  • La cantidad de tiempo que hay que invertir para el desarrollo de este tipo de aplicaciones.

EasyVRML busca mejorar la productividad del programador mediante la automatización de tareas, como la generación de código y la reutilización de objetos y módulos. Facilita el desarrollo de entornos virtuales, cuyos componentes puedan integrar comportamiento complejo a través de herramientas de diseño más intuitivas y representativas, como el Lenguaje Visual de Asignación de Comportamiento

6. Conclusiones y Trabajo Futuro

El esquema genérico de comunicación, los modelos de sincronización y el PACR, pueden ser utilizados como la base para lo siguiente:

  • Asignación de comportamiento, utilizando cualquier lenguaje orientado a objetos.
  • La creación de ambientes virtuales, distribuidos y/o colaborativos

Sin embargo, éstos son solamente las bases de trabajos posteriores. En particular, los autores trabajan actualmente en el primer apartado.

En cuanto al desarrollo de ambientes distribuidos, se considera la aplicación de tecnologías que en la actualidad ofrecen una capa de software de más alto nivel, que el simple paso de mensajes a los objetos distribuidos a través de Sockets. Existen muchos ejemplos de estas tecnologías, como implementaciones de CORBA (Common Object Request Broker Architecture) y RMI (Remote Method Invocation), por mencionar algunas. La aplicación de estas tecnologías para la asignación de comportamiento a componentes en escenarios VRML, generaría una base más robusta para la generación de VDE's (Virtual Distributed Environments), ambientes en los cuales los usuarios (avatars) son objetos que se encuentran en cualquier sitio. Las ciudades virtuales estarían conformadas por componentes distribuidos, proporcionados por empresas o por los usuarios de la comunidad.

El empleo de CORBA, por ejemplo, permitirá que el analizador de código, descrito en el Capítulo IV, pudiese ser sustituido por un compilador de IDL (Interface Definition Language), con lo cual es posible incorporar otros lenguajes para la definición de comportamiento de una forma sencilla. De esta forma se pueden utilizar objetos distribuidos, escritos en diferentes lenguajes, ejecutándose en sus plataformas nativas.

Aplicaciones posibles son los laboratorios virtuales, en los cuales se pueden tener simulaciones de aparatos sofisticados y caros para que los aprendices experimenten sin poner en riesgo los aparatos reales. Por otro lado, se pueden tener sistemas de telecontrol, en los que se compartan recursos escasos y caros, por ejemplo telescopios y robots.

El estándar VRML 2.0, según la opinión de los autores, está llegando al límite de sus capacidades, ya que se necesita emplear alguna de las diferentes extensiones al lenguaje, cada vez que se quiere escribir una aplicación con él. En el ámbito mundial, se están dedicando esfuerzos para extender la funcionalidad a un lenguaje que está llegando a su tope. Tales esfuerzos bien podrían ser dedicados a la generación de un nuevo estándar del lenguaje.

Con el conocimiento de las necesidades actuales y las tendencias futuras, es posible crear la especificación de VRML 3.0. Dicha especificación debiera considerar la tendencia hacia la creación de VDE's, creados a partir de componentes. De la misma forma, se deben considerar las tecnologías de objetos actualmente disponibles (particularmente objetos distribuidos). Por ello el nuevo VRML debe ser orientado a objetos, para soportar estas tecnologías y, más aún, dirigido a agentes inteligentes capaces de habitar los VDE's y dar servicios a los usuarios de éstos.

Con la incorporación de este tipo de capacidades, los programas en VRML serán cada vez más poderosos, pero al mismo tiempo más grandes y complejos. Por ello, el formato del archivo VRML podría ser cambiado a un bytecode (quizá el bytecode de Java), para hacer más eficiente el intercambio de escenarios virtuales.

En resumen, existe una amplia gama de aplicaciones de la RV. Si ésta es utilizada en conjunto con otras tecnologías, los alcances de los sistemas de RV crecen de manera significativa, pero, al mismo tiempo, se generan nuevos problemas y líneas de investigación, que hacen que el panorama de trabajo sea prometedor y amplio.


a) Tiene las restricciones que le inponga la plataforma en la cual se está ejecutando.

b) Protocolo de Asignación de Comportamiento Remoto.

Bibliografía


1Adam J. A. (1993) Virtual Reality is for Real, IEEE Spectrum, 1(10).

2Armenta A. Antonio (1999) Asignación de Comportamiento Complejo a Componentes de Mundos Virtuales en Java, Tesis de Maestría, Centro de Investigación en Computación del Instituto Politécnico Nacional.

3 Bayarri Salvador, Fernández Marcos, & Pérez Mariano (1996) Virtual Reality for Driving Simulation. Communications of the ACM: Virtual Reality, 39 (5): 72-76.

4a , 4b Brutzman Don (1998) The Virtual Reality Modeling Language and Java, Communications of the ACM: Java, 57-64.

5 Carey Rikk, Bell Gavin, & Marrin Chris (1997) ISO/IEC 14772-1 Virtual Reality Modeling Language (VRML97), VRML Consortium Incorporated, URL: http://www.vrml.org/Specifications/VRML97

6 Fisher S. Scott & Fraser Glen (1996) The Virtual Brewery Adventure, ACM-SIGGRAPH: Computer Graphics FOCUS: "Real" Virtual Reality SIGGRAPH '96 Slide Sets, 30 (4): 44-46.

7a , 7b Gauvin Daniel, Marchal Hervé , Gauthier Roger, Rizand Jean-François, Delle D. Vince (1997) LALO: Langage d'Agents Logiciel Objet. Centre de Recherse Informatique de Montreal, URL: http://www.crim.ca/sbc/english/lalo/

8 Gigante M.A., Earnshaw R. A., & Jones H. (1993) Virtual Reality: Definitions, History and Applications in Virtual Reality Systems. Academic Press Ltd - Harcourt Brace & Company.

9 Hartman Jed, Wernecke Josie (1996) The VRML 2.0 Handbook. Addison Wesley

10 Lavroft Nicholas (1992) Virtual Reality Playhouse: Explore Artificial Worlds on your PC. Waite Group Press, ISBN 1-878739-19-0.

11 MageLang Institute (1999) Fundamentals of Java SecurityURL: http://developer.java.sun.com/developer/onlineTraining/Security/Fundamentals/index.html

12 Sun Microsystems Inc. (1997) Java Native Interface Specification. URL: http://java.sun.com/products/jdk/1.1/docs/guide/jni/spec/jniTOC.doc.html

13 Sun Microsystems Inc. (1999) The JavaTM Virtual Machine Specification.URL: http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html

 


[ Este número ]



Dirección General de Servicios de Cómputo Académico-UNAM
Ciudad Universitaria, M
éxico D.F.