La visualización de los modelos 3D sobre la imagen real es el reto a superar mediante el uso de una librería gráfica. Existen implementaciones para el entorno PC, desde el nivel más bajo (OpenGL o DirectX) hasta herramientas de desarrollo de aplicaciones 3D y videojuegos (VirTools, Quest3D, …) pasando por librerías de nivel intermedio como Java3D, Open Inventor o Performer, entre otros. Además se han definido estándares para visualización 3D en entornos Web (VRML o X3D), que en todo caso proporcionan una abstracción del hardware sobre el cual se ejecutan. Las peculiaridades hardware de los dispositivos móviles, (no poseen tarjeta gráfica con funcionalidades para visualización 3D, o si la poseen es diferente y con funcionalidades limitadas, y reducida capacidad de procesado) obligan a desarrollos de software y librerías específicas para estos dispositivos. En la mayoría de los casos se trata de implementaciones de versiones de los estándares existentes para entornos PC, particularizadas para dispositivos móviles (con o sin tarjeta gráfica). En este apartado nos centramos en dispositivos móviles tipo PDA o Smartphone por tratarse de los dispositivos más introducidos en el mercado y que más se utilizan para el desarrollo de aplicaciones de realidad aumentada móvil. Se presentan a continuación algunos desarrollos software, tanto de bajo como de alto nivel, para la visualización tridimensional sobre estos dispositivos móviles.
2.2.4.1 Bajo Nivel
En lo que respecta al software gráfico de bajo nivel, cabe destacar que se ha desarrollado la especificación para OpenGL ES [82], la última versión publicada al momento de realizar este estado del arte, es la OpenGL ES 2.0. Esta especificación se desarrolla con el propósito de búsqueda de un estándar para la comunicación entre el hardware gráfico y los desarrollos software para dispositivos móviles. Previo a la consolidación de esta especificación se han desarrollado implementaciones tipo OpenGL para PDA y Smartphone, como SoftGL, actualmente Klimt [83], TinyGL [84], o PocketGL [85] en ninguno de estos casos se trata de una implementación de la especificación OpenGL ES, y prácticamente todas están en desuso actualmente. Las primeras implementaciones de OpenGL ES conocidas hasta el momento son: PowerVR [86] y Vincent3D [87], la primera de ellas es una implementación hardware y la segunda es software.
¾ PowerVR es el nombre de la tecnología de los chips gráficos utilizados en dispositivos móviles que desarrolla Imagination Technologies. Representa la principal implementación hardware del estándar OpenGL ES y se ha convertido en
el estándar de facto para el desarrollo de aplicaciones con aceleración gráfica sobre dispositivos móviles. Actualmente licenciado en más de 100 productos diferentes de las principales compañías de producción de dispositivos móviles. Desde el punto de vista SW, soporta los principales sistemas operativos disponibles para estas plataformas, WinCE, Windows Mobile 2003, WM5 y WM6 , Linux, Symbian y Android.
¾ Vincent3D consiste en el desarrollo de una implementación de OpenGL ES para Pocket PC y Smartphones. Inicialmente se desarrolla una implementación para PocketPC con procesador Intel XScale PA2xx. El desarrollo actual de dicha librería es compatible con la versión OpenGL ES 1.1. La principal diferencia de esta implementación con otras librerías estándar es que el foco está puesto en sistemas embebidos y en la utilización de aritmética de coma fija frente a la de coma flotante. Se trata de una implementación de código abierto. La versión 2.0 de la librería desarrolla la implementación compatible con OpenGL ES 2.0.
Además de las arriba descritas, se han desarrollado implementaciones software y plug- ins para el desarrollo de aplicaciones compatibles con OpenGL ES sobre dispositivos móviles de Sony Ericsson y Nokia. En el primero de los casos se desarrolla sobre la capa de interfaz gráfico UIQ utilizada en la mayoría de los teléfonos de este fabricante [88], y en el segundo caso se trata de un plug-in sobre el interfaz de usuario S60 desarrollado para Symbian OS [89]. Entre los que utilizan estas implementaciones se encuentran los móviles de alta gama de la propia compañía, como los N95, N96 y N97. Existe actualmente un proyecto muy activo en la creación de una librería de bajo nivel que integra implementaciones de las principales librerías de código abierto necesarias para el desarrollo de aplicaciones científicas, juegos y otras aplicaciones que necesitan gráficos 3D, audio y funcionalidades de programación paralela en sistemas heterogéneos. Este proyecto se denomina Open Toolkit (OpenTK)[90].
Desde la versión 5.0 de Windows Mobile éste incluye la versión móvil de Direct3D. Direct3D es el API para programación de gráficos de Microsoft disponible para dispositivos Windows. En entorno PC representa la principal alternativa a OpenGL, esta inclusión en dispositivos móviles ha favorecido el desarrollo de aplicaciones gráficas para el entorno Windows [91].
2.2.4.2 Alto Nivel
Para facilitar la generación de aplicaciones gráficas y ocultar las primitivas básicas y algoritmos de los lenguajes de bajo nivel se desarrollan las librerías o APIs de alto nivel. La manera más habitual de generar gráficos 3D en tiempo real son los scene graph. Un scene graph es básicamente una base de datos con una estructura de árbol que contiene una jerarquía de ramas y una serie de hojas o nodos finales. Cada nodo hoja realiza alguna operación de rendering. Los nodos rama se encargan de realizar tareas como: determinar el campo de visión (FOV), gestionar el nivel de detalle (LOD), transformaciones, animaciones, etc. En pocas palabras un scene graph es una representación jerárquica de un modelo 3D compuesta de nodos. Cada nodo representa por ejemplo un material, un color, una geometría, una transformación, etc.
Los APIs de Scene Graph de alto nivel para entorno PC más extendidos son: Open Inventor, OpenGL Performer, OpenSG, OpenSceneGraph o Java3D.
El entorno de los dispositivos móviles sigue la estela de su hermano mayor (entorno PC) y basado en implementaciones previas desarrolladas para entorno PC en unos casos o específicos para las características de los pequeños dispositivos en otros, se están
desarrollando librerías de alto nivel para entorno móvil que faciliten el desarrollo de aplicaciones gráficas para estos entornos. Algunos de los ejemplos actualmente disponibles son:
¾ Coin 3D / Studierstube ES
Coin3D fue la primera implementación de alto nivel desarrollada para implementar aplicaciones gráficas 3D sobre dispositivos móviles tipo PDA. En realidad se trata de una implementación reducida de OpenInventor para plataforma PocketPC. Se desarrolló dentro del proyecto Handheld AR [92] y se ejecutaba sobre Klimt [83] (implementación ligera de OpenGL que no implementa la especificación OpenGL ES). El conocimiento adquirido en esta implementación ha permitido el desarrollo de lo que es ahora Studierstube ES [92], un software de realidad aumentada de alto nivel desarrollado desde cero y sobre diferentes plataformas (Windows, Windows CE y Symbian). Soporta OpenGL ES 1.x y 2.0 así como Direct3D Mobile. Es además capaz de ejecutarse tanto en dispositivos con tarjeta gráfica dedicada como en los que no disponen de aceleración gráfica. Se trata de una librería bastante potente con capacidad para la explotación de sus capacidades e integración de un importante número de dispositivos (visualización, tracking, interacción, etc.). La potencia de la plataforma es directamente proporcional al grado de complejidad del desarrollo de aplicaciones sobre dicha librería. Es actualmente una de las más extendidas y utilizadas.
¾ M3G
Se trata del API de Java para aplicaciones 3D para dispositivos móviles. En contra de lo que pudiera parecer, la simplificación del código de Java3D resultaba más complejo que la creación de un API completamente nuevo. Por este motivo se rehizo completamente el diseño del API creando M3G [93]. Este API conserva muchas de las características buenas y ofrece esencialmente la misma funcionalidad principal que Java3D, pero eliminando los métodos redundantes y la jerarquía de clases que dificultan Java3D. Como resultado, el número de clases y métodos del API M3G es un orden de magnitud inferior que el de Java3D. M3G requiere de la instalación de Java Virtual Machine (JVM) en el dispositivo móvil. Esta característica hace mucho más adecuado su uso para la programación de aplicaciones para teléfonos móviles que ya incluyen JVM generalmente, sin embargo J2ME esta poco extendido en plataformas PocketPC y Microsoft no proporciona ninguna JVM para estas plataformas. Es necesario recurrir a desarrolladores externos de implementaciones de JVM que son generalmente incompletas. El código Java es generalmente más lento que el código nativo, esto resulta especialmente crítico en dispositivos móviles. Esto se debe principalmente al modelo de ejecución de la máquina virtual de java y a la protección incorporada contra accesos a zonas de memoria restringida y memory leaks. El reto en el diseño del API está en encontrar el nivel de abstracción adecuado para acelerar las tareas comunes sin hinchar el API ni sacrificar flexibilidad.
¾ MobiX3D
MobiX3D es un visualizador de contenidos X3D y H-Anim desarrollado para dispositivos móviles. El motor de visualización se basa en el estándar OpenGL ES. Existen dos versiones de MobiX3D una de ellas basada en la implementación de Hybrid Rasteroid de OpenGL ES 1.1 y la otra desarrollada para dispositivos equipados con el acelerador gráfico de Intel 2700G, como Dell Axim X51v, basado en la implementación de OpenGL ES 1.0. MobiX3D soporta un subconjunto de las funcionalidades X3D y el estándar completo H-Anim. MobiX3D explota las implementaciones de OpenGL ES
para soportar varias de las principales funcionalidades como transparencia, color y sombreado, texturas, luces y backface culling [94].
¾ OGRE
OGRE (Object Oriented Graphics Rendering Engine) [95] es un motor gráfico libre y multiplataforma, orientado a la generación de aplicaciones 3D en tiempo real. Una de sus características diferenciadoras es su diseño modular, lo que permite al programador utilizar, por ejemplo, diferentes sistemas de render. En concreto, en plataforma PC existen dos implementaciones posibles: OpenGL y Direct3D. Un grupo de investigación de la Universidad de Pernambuco, Brasil, ha adaptado el código de este motor para hacer que funcione en la plataforma PocketPC [96]. En la adaptación se han introducido algunas mejoras de rendimiento para dicha plataforma. La motivación de esta adaptación fue la realización de aplicaciones de realidad aumentada sobre dispositivos móviles, sobre entornos de desarrollo de alto nivel. El render usado para esta plataforma en su primera implementación es Klimt, como ya se ha comentado anteriormente esta implementación de bajo nivel no sigue la especificación OpenGL ES. Actualizaciones de este desarrollo se han implementado para su utilización sobre otras implementaciones de bajo nivel como Vincent3D que sí siguen la especificación OpenGL ES. Actualmente existen también implementaciones de este motor gráfico para otros sistemas operativos de dispositivos móviles como iPhone (OS) o Symbian.