V.R,M.L. & Fox: "El día que entramos en la realidad virtual"

Por Pedro Pascua

Para aquellos que no conozcan el término, VRML son las siglas del Virtual Reality Modeling Language. Como su nombre indica, el Lenguaje de Modelado de Realidad Virtual es un conjunto de instrucciones y primitivas para definir entornos 3D virtuales en los que poder movernos e interactuar con sus objetos. El nombre VRML nos puede recordar al HTML, y en realidad funcionan de modo muy similar. Al igual que el HTML, el VRML es un estándar que consta de una serie de instrucciones con una sintaxis determinada. Los escenarios o mundos (como se suelen llamar habitualmente) VRML se crean a partir de una serie de líneas de código compuestas en un fichero de texto ASCII que es interpretado por un Browser de Realidad Virtual. Esto permite su utilización en internet del mismo modo que se usa el HTML con un Browser Web. No obstante, aunque el estándar VRML se haya desarrollado principalmente para su uso en internet, podemos utilizarlo localmente para dotar de VR a nuestras aplicaciones .

Bueno, pero esta revista, ¿no tenía algo que ver con el Fox ... ? – Efectivamente, alguien puede estar preguntándose que tendrá que ver esto con el Fox. De momento nada, pero nunca se sabe... A casi todos nosotros nos gusta el Fox como herramienta de trabajo, conocemos sus posibilidades pero también sus limitaciones, y esperamos que no llegue el día en que tengamos que cambiar de lenguaje porque éste no cubra todas nuestras necesidades. Echemos la vista atrás por un momento... Hace unos años, muchos ordenadores no utilizaban ni siquiera pantallas gráficas, y nuestros clientes eran felices con sus terminales en modo texto y sus datos alfanuméricos que les proporcionábamos desde dBase, Clipper, Cobol... y montones de lenguajes distintos que a veces recordamos con cierta añoranza. Con el tiempo llegaron las pantallas gráficas y como no, Windows. Y todos empezamos a alucinar con los dibujitos tan espectaculares que aparecían en la pantalla y que luego podíamos imprimir a 120x144 ppp con nuestras ‘silenciosas’ impresoras de 9 agujas. Entonces los clientes querían tener también dibujos e imágenes en sus aplicaciones y poder guardar la foto de los empleados en su base de datos...etc,etc. Y hubo que espabilar y echar mano de los campos General y de los OleBoundControl para contentar al cliente y a la vez poder seguir fieles al Fox... Pues bien, no es que me quiera meter a profeta, pero que nadie se extrañe si dentro de unos años o meses, o tal vez la semana que viene, le llega un cliente diciendo que ha visto en la tele un programa de ordenador, con el que te podías pasear por una casa completamente amueblada. Y se la ha metido en la cabeza que como él fabrica muebles, le gustaría que en el catálogo de artículos de su base de datos no salga el gráfico plano que le habíamos hecho el mes pasado sino un dibujo 3D en el que podamos ver el mueble completo y darle vueltas para verlo desde cualquier perspectiva. Y ya puestos, que al introducir un pedido, podamos crear una composición de las habitaciones con todos los elementos del pedido y pasearnos por ella a ver que tal queda.... Si este día llega, tendremos varias opciones: buscar rápidamente una ventana desde la que saltar, retirarnos a algún lugar perdido donde dedicarnos a la vida contemplativa o mantener la calma, tragar saliva y decirle a nuestro cliente... – estooo...buenooo, vale. La semana que viene te lo traigo – Personalmente, creo que la tercera es la opción más prudente, aunque no aseguro que sea la más fácil....

En fin, despues de esta leve reflexión sobre la dura vida del desarrollador, vayamos a lo práctico; ¿cómo entrar en la realidad virtual sin abandonar a nuestro querido zorro?. Afortunadamente, a la vez que las posibilidades gráficas y multimedia de nuestras máquinas avanza a un ritmo imparable, el mercado de componentes trata de proporcionarnos herramientas que nos permitan mantener ese ritmo. De hecho, existen librerías de controles ActiveX (u OCX), que nos permiten gestionar imágenes, audio y video sin más que ‘pegar’ un control en nuestro formulario. En el caso de la realidad virtual, aunque empieza a haber un surtido bastante amplio de componentes, es un campo que se encuentra ahora mismo en plena expansión a nivel de ordenadores domésticos. Hasta hace poco, la potencia de cálculo requerida para ‘renderizar’ estos escenarios virtuales a tiempo real sólo permitía el desarrollo de software de VR para estaciones gráficas del tipo Silicon Graphics o MicroStation, pero esto a cambiado gracias al constante incremento de velocidad que han ido experimentado los procesadores de la familia x86. Dentro de la oferta de componentes, lo más habitual es probar primero con los que son Freeware, claro... Por ello, para esta primera inmersión en la realidad virtual, hemos empleado el ActiveX de Microsoft que se instala como Plugin del Explorer cuando tratas de explorar un mundo virtual. El control se llama VRMLBrowserCtl y está incluido en los fuentes de la revista.

 

Este control soporta el estándar VRML 1.0 y 2.0. Los ficheros fuente que contienen definiciones VRML suelen tener la extensión .WRL (de World) y pueden se de dos tipos, ficheros ASCII estándar o ficheros con compresión gZip. Estos últimos se visualizan igual desde el browser pero al estar comprimidos, su código ya no es editable. Casi todos los mundos virtuales que nos encontramos por internet utilizan este formato para reducir el tiempo de descarga. Aunque vamos a ver como utilizar esto a nivel local, el salto a internet es inmediato, en el caso de que nuestro cliente quisiera publicar su catálogo 3D en su página Web.

La primera prueba que podemos hacer es trivial. Una vez instalado el control en la máquina vamos al VFP5.0 y creamos un formulario. Insertamos en su interior un control VRMLBrowserCtl y en la propiedad World del control, ponemos el nombre de un fichero .wrl . Ejecutamos el formulario ... e voilà! Ya podemos sumergirnos en el mundo que hemos cargado. Para poder cambiar de mundo desde el formulario, podemos añadir un CommandButton y en el evento Click() agregar el siguiente código:

Local lcWorld

lcWorld = GetFile("wrl")

ThisForm.OleControl1.World = lcWorld

Hasta aquí ya hemos visto que la cosa tiene poco misterio, siempre y cuando tengamos el fichero .wrl . Pero..., ¿y como creo yo los ficheros wrl con los muebles de mi cliente ? Tenemos varias alternativas. La más inmediata pero generalmente inviable, es la de definir el mundo tecleando su código. Esto es factible cuando tenemos una escena con varios objetos sencillos, pero en cuanto el modelo se complica, la labor se hace imposible, ya que para ciertos objetos, se requieren modelos con cientos o miles de vértices. Lo lógico en este caso es utilizar alguna de las herramientas de conversión que nos permiten trasnsportar ficheros de programas de modelado 3D al formato VRML. Hay gran cantidad de ellos. Los más usuales son los convertidores de DXF a VRML, ya que el DXF es un formato de intercambio de modelos 2D y 3D compatible con casi todos los programas de CAD. Algunos programas como el DesignCAD 97 tienen ya la opción de guardar los modelos en formato VRML y en otros podemos encontrar herramientas en forma de Plugin como el que permite exportar VRML2.0 desde 3D Studio MAX. En cualquier caso, lo que obtendremos al final es una representación de nuestros modelos en un fichero ASCII que podremos editar y modificar a nuestro antojo.

 

Para resolver el tema del catálogo de productos 3D de nuestro fabricante, podríamos crear un modelo WRL para cada artículo, y en nuestra tabla de artículos, agregar un campo con el nombre del fichero de modelo correspondiente. Esto nos permitiría visualizar el modelo 3D del artículo igual que hasta ahora podíamos ver la foto en pantalla. La siguiente fase, la de visualizar un pedido completo ya no es tan sencilla, pues implica que el modelo con todos los artículos que componen el pedido hay que crearlo en run-time, ya que es imposible tener un modelo hecho a priori. El problema que se plantea es en cierto modo equivalente al que teníamos a la hora de crear un página HTML dinámica con los datos de una consulta; que no conocíamos el contenido de la página hasta no realizar la consulta. Por tanto, teníamos que ejecutar la consulta y una vez conocidos los datos a mostrar, generar el código HTML de la página conteniendo los resultados de la consulta. Este procedimiento podría ser aplicable a nuestro caso, ya que se trata de que nuestro programa genere a partir de los datos del pedido una escena que contenga una serie de objetos correspondientes a las líneas de pedido. Para ello, deberíamos guardar en la tabla de artículos, no la dirección del fichero wrl, sino el código fuente VRML que define el objeto en un campo MEMO. De este modo, podríamos crear el código de una escena, insertando bloques correspondientes a la definición de cada objeto y salvando todo en un fichero .wrl que asignaríamos posteriomente al control para visualizarlo. Este sistema requiere un conocimiento algo más profundo del lenguaje y la sintaxis VRML, pues los ficheros .wrl han de comenzar con unas sentencias de cabecera para que el browser los reconozca como tales. Veamos el aspecto que tiene el código fuente de una escena VRML:

#VRML V1.0 ascii
Separator {
     Material {
         emissiveColor 1 1 0
      }
Sphere {
radius 10
}
Separator {
Transform {
      translation 0 20 20
    }
Material {
      diffuseColor 0 0 1
      shininess 0.9
}
Sphere {
      radius 2
}
Separator {
      Transform {
         translation 4 4 0
          }
      Material {
          diffuseColor 0.7 0.7 0.7
            shininess 0.3
       }
Sphere {
   radius 1
}
}
}
}

Este texto copiado en un fichero .wrl y leido desde el explorer o desde nuestro formulario Fox en el que hemos insertado el VRMLBrowserCtl nos generaría una escena compuesta por tres esferas representando el Sol la Tierra y la Luna. Este texto aparentemente sencillo se suele ir complicando en cuanto queremos modelar escenas de mayor complejidad, por lo cual resulta imprescindible el ayudarse de herramientas complementarias para el desarrollo de los modelos.

Aunque esto sólo ha sido una breve introducción al mundo de la realidad virtual a través del ActiveX del explorer, existen otras herramientas para desarrollar en este campo que son bastante más potentes aunque claro está, más complejas pero que abren un amplio abanico de posibilidades en VR. Nosotros nos hemos conformado con visualizar objetos, pero la versión 2.0 del estándar VRML nos permite también interactuar con ellos desde el browser, moverlos, cambiar luces y cámaras, etc,etc. El lenguaje nos permite dotar a los objetos que componen una escena de propiedades y eventos que podemos gestionar y programar en Java para así definir el comportamiento de los elementos dentro del mundo virtual.

Basados en el estándar, se están desarrollando otros lenguajes de VR entre los que destacan el software de Viscape, -Superscape-, que permite desarrollar tanto aplicaciones locales como entornos virtuales para internet. Sus mundos tienen la extensión .SVR y se visualizan con otro activeX que se puede conseguir desde su página en http://www.viscape.com .

 

Otro lugar interesante donde se puede conseguir un control 3D para utilizar desde Visual Basic o Visual FoxPro es el web de TemplateGraphics Software http://www.tgs.com , compañía que ofrece una interesante selección de herramientas para desarrollo 3D, entre ellas el 3Space Control, ActiveX utilizable desde cualquier entorno visual, dotado de numerosas posibilidades gráficas, entre ellas, la de poder importar ficheros DXF directamente dentro de una escena. Los que estén interesados en aprender más sobre este tema, no deben dejar de pasar por el Web de Silicon Graphics (http://vrml.sgi.com), pioneros en el desarrollo de sistemas de realidad virtual. También hay gran cantidad de información sobre las especificaciones del estándar VRML 2.0 en http://www.sdsc.edu/vrml/.


© 1998 FoxPress. All rights reserved.