miércoles, 28 de febrero de 2007

Virtualizar no funciona

Sospecho que la razón de todos los problemas pueda ser que estoy usando los entornos de desarrolo en una máquina virtual con VMWare. Eso de correr un emulador (el de PocketPC) dentro de otro emulador (VMWare) la verdad es que no suena muy bien.

Tras una rápida búsqueda por internet confirmo lo que me temía en esta página:

Emulator does not run on VMware

Visual Studio .NET 2003 does not support running the emulator in a VMware™ session.


Así que está claro, todo lo que he estado probando hasta ahora ha sido tiempo perdido. El siguiente paso será instalar de nuevo todas las herramientas en un Windows XP corriendo en un PC real.

lunes, 26 de febrero de 2007

Siguen las pruebas con Visual ...

Se me ocurre que quizás no haya tenido éxito en las primeras pruebas con los entornos de desarrollo por pensar "a la antigua usanza", es decir, suponer que un programa como el de "Hola mundo" funcionará mostrando el mensaje en una ventana tipo consola o similar. Seguramente no será así.

Decido saltarme ese paso y meterme de lleno a hacer pruebas con la librería de OpenGL-ES que nos habían mostrado anteriormente. Me descargo la librería Vicent Mobile y la descomprimo, pero no se muy bien qué hacer con ella. Bueno, sí lo se, tengo que incluir en el programa principal las cabeceras de la librería y decirle al compilador y al linker que la utilice cuando construya el programa, pero no se cómo hacerlo. Busco por internet y me encuentro esta página donde se explica cómo configurar el entorno para trabajar.

Hago lo que indica la página, que utiliza como entorno el Embedded Visual C++ 4.0 y tras varios intentos consigo compilar un programa de test, pero me sucede lo mismo que en las primeras pruebas, que al lanzar el emulador para probarlo se queda con la pantalla negra hasta que vence el tiempo.

Intento hacer algo equivalente con el Visual Studio 2005, pero por más que lo intento me resulta imposible, siempre termino con errores muy extraños o con el conocido pero no por ello menos frustrante "Must define a target architecture".

jueves, 22 de febrero de 2007

Artículo: A 3D Character Animation Engine for Multimodal Interaction on Mobile Devices

Resumén esquemático del artículo A 3D Character Animation Engine for Multimodal Interaction on Mobile Devices.

El artículo trata de la implementación de un motor para representar animaciones en un teléfono móvil. Al ser del año 2005 el trabajo no se utilizó el estándar OpenGL-ES, sino que se programó un sistema de representación en 3D partiendo de cero, sobre plataforma Symbian.

Lo más interesante de lo que habla es sobre una desconocida parte del estándar de animación MPEG4 (el que se usa en los vídeos DivX) que se centra en la animación de caras o bustos parlantes. Se parte de tres nociones básicas:

  • Feature Points (FP): Son una serie de puntos clave de la cara para hacer gestos, como el centro de los ojos, los bordes de los labios y de las cejas, la punta de la nariz y de la barbilla, y así hasta 84.

  • Rostro neutral: Es una cara de referencia, a partir de la que se describen los movimientos de los diferentes elementos. En el rostro neutral la boca está cerrada, la mirada dirigida perpendicular al plano de la pantaya, y las cejas perpendiculares al iris.

  • Facial Animation Parameteres (FAP): Son los responsables de describir los movimientos básicos de la cara, tanto a bajo como a alto nivel. El estándar define 66 de bajo nivel y 2 de alto nivel.

A partir de estos tres elementos, se puede describir cualquier animación de la expresión de la cara especificando mediante los FAP los movimientos respecto a la cara neutral. Se pueden encadenar muchas de estas variaciones en un flujo que puede transmitirse haciendo un uso muy eficiente del ancho de banda. Al ser los puntos de referencia independientes del modelo de la cara, una misma animación puede servir para distintos personajes sintéticos.


La siguiente parte del artículo habla sobre la estructura interna del motor de animación, que básicamente viene a ser un decodificador de flujos FAP, dividido en varios bloques o módulos encargados de calcular la animación de la malla del modelo, representarla en pantalla y sincronizarla con el flujo de datos de audio.


A continuación en el artículo se hacen varias medidas de renidimiento, midiendo en distintos modelos de teléfono móvil el número de FPS conseguidos para modelos de varias complejidades (número de polígonos).


Para terminar, se propone una aplicación para el motor, que es un lector animado de mensajes SMS. El servidor que lo recibe decodificaría el texto en audio y en los gestos de la cara al pronunciarlo, y generaría un mensaje multimedia (MMS) con la animación completa.

lunes, 19 de febrero de 2007

Primeras pruebas con Visual Studio 2005

Como el Embedded Visual C++ me dió problemas (no se lanzaba el emulador de PocketPC) decido probar el Visual Studio 2005.

Nada más lanzarlo ya se nota que es menos espartano que el otro entorno, con ventanas más bonitas, asistentes e información actualizada que se descarga de internet.

Comienzo probando a hacer el primer programa de C que se hace siempre. Creo un nuevo fichero de tipo "C++ source" y escribo el típico:

#include

void main()
{
printf("Hola mundo\n");
}

Lo construyo, y me aparece un error:

Fatal error C1189: #error: Must define a target architecture. File: winnt.h. Line: 648

Comienzo a probar combinaciones de "Platform Solution" (PocketPC 2003 ARMV4, Smartphone 2003 ARMV4, Win32), "Target Device" (PocketPC 2003 SE Emulator, PocketPC 2003 SE Emulator VGA, y otros similares) y el "Configuration Manager". Me siguen saliendo errores similares, e incluso cuando pretendo construirlo como una aplicación Win32 aparecen extraños mensajes de que faltan símbolos en algunos ficheros de cabecera .h

Busco por internet, y encuentro algunas posibles soluciones, que pasan por poner #includes e #ifdefs también muy extraños y para nada intuitivos. Ninguna de ellas funciona.

Finalmente leo en varios sitios que lo de empezar con fichero sueltos no es muy buena idea, lo que hay que hacer es iniciar un nuevo proyecto del tipo "Smart Device Application". Así lo intento hacer, pero cuando elijo esa opción y le doy un nuevo nombre al proyecto, se queda todo el entorno como "parado" durante un par de segundos, y luego vuelve a la ventana donde se seleccionaba el tipo de proyecto. O sea, ¡¡¡está funcionando mal!!!

Me descargo de la web de Microsoft el Service Pack 1 para el visual Studio 2005 y lo instalo. El problema persiste, no soy capaz de crear un nuevo proyecto para dispositivos móviles :-(

martes, 13 de febrero de 2007

Primeras pruebas con Embedded Visual C++

Las primeras pruebas no han dado muy buen resultado. Lo primero que he tratado de hacer es el típico programa que escriba "Hola mundo". Para ello creo un proyecto nuevo, selecciono que sea del tipo "aplicación para Pocket PC 2003", y que va a ser un ejemplo de programa que muestre "Hola mundo". Me crea el proyecto con unos cuantos ficheros con el código fuente, cabeceras y recursos. Elijo que la plataforma de destino sea el emulador de PocketPC 2003 y por fin voy al menú "Build" y le digo que contruya todo el proyecto. Lo compila bien todo y lanza el emulador para ejecutar el resultado. Aparece una ventana con una barra de progreso en la que pone que se está conectando con el dispositivo y otra ventana con una imagen de una PDA. La barra se va rellenando, y la pantalla de la PDA del emulador permanece en negro, no aparece nada, ni un error ni el sistema de la PDA ni ninguna ventana dentro de la del emulador. Finalmente, tras rellenarse 3 o 4 veces la barra de progreso se cierra, junto con la ventana del emulador y aparece un mensaje en la ventana de debug del compilador, que dice que hay un timeout y que no se ha podido conectar con el dispositivo.

Pruebo con otros tipos de proyectos de ejemplo más sencillos, e incluso hago uno programa en C sencillo, pero sin éxito, o se queda el emulador parado como he descrito o empiezan a salir errores extraños del compilador.

El próximo día probaré con el Visual Studio 2005 a ver si va mejor. Por ser este de pago y el Embedded Visual C++ gratuito, quizás esté más trabajado y funcione mejor.

sábado, 10 de febrero de 2007

Instalación de herramientas de desarrollo

Las herramientas que se van a utilizar son estas, y han de instalarse en este orden:
  1. Embedded Visual C++ 4.0. Producto gratuito, descargable desde aquí.
  2. Embedded Visual C++ 4.0 Service Pack 4. Parches para el anterior, descargables desde aquí.
  3. PocketPC 2003 SDK. Kit de desarrollo para plataformas PocketPC, gratuito y descargable desde este link.
  4. Optativo: Visual Studio 2005. Entorno de programación de Microsoft, no es gratis, es necesaria una suscripción al MSDN.
Esto son "solo" los compiladores de C/C++ y utilidades para el desarrollo, como emuladores y documentación. Sería necesario además añadir luego las librerías de OpenGL-ES que se vayan a utilizar, como la Vincent Mobile 3D Rendering Library de la que se habló en un post anterior.

De momento se van a hacer programas de prueba sencillos para familiarizarse con el entorno, pues nunca he trabajado con él y no se cómo funciona. Se ha hecho la instalación en una máquina virtual con VMWare para poder usarla desde el S.O. que utilizo habitualmente, y tambén para en un momento dado llevármela en un disco duro externo a otro ordenador si fuera necesario.

miércoles, 7 de febrero de 2007

Links sobre OpenGL-ES y videojuegos 3D en teléfonos móviles

Una vez que se ha decidido utilizar el estándar OpenGL-ES para la programación del avatar, se buscan ejemplos de juegos y otros desarrollos para ver qué se ha hecho ya y saber un poco más acerca de sus posibilidades:

Videojuegos y OpenGL-ES


- Presentación de ATI en la Game Developers Conference. Resumen de características de OpenGL-ES 2.0. http://ati.amd.com/developer/gdc/2006/GDCMobile2006-Ginsburg-OpenGLES2.0.pdf Esta conferencia internacional cuenta con un apartado dedicado en exclusiva al desarrollo de juegos sobre teléfonos móviles. Además de la presentación anterior, es posible descargarse las actas (proceedings) de años anteriores.

- El grupo Khronos tiene una web con recursos para desarrolladores de OpenGL-ES. En ella hay tutoriales, documentación, kits de desarrollo, librerías, utilidades, etc. http://www.khronos.org/developers/resources/opengles/

- Mobile 3D World (http://www.mobile3dworld.com ). Portal dedicado a juegos 3D para móviles. Parece recien creado y no tiene mucha información, salvo un artículo sobre "10 tendencias en juegos móviles para el 2007" (la número 7 se refiere a juegos 3D): http://www.mobile3dworld.com/News/tabid/52/articleType/ArticleView/articleId/40/10mobilegamestrendsfor2007.aspx

- Entrada en un blog acerca de la aceleración en teléfonos móviles. Se mencionan varios juegos que usan OpenGL-ES (Splinter Cell, Quake, Need for Speed) y hay capturas de pantalla de los mismos. Incluye también una comparativa entre prestaciones de los chips aceleradores de NVIDIA y ATI. http://blog.aldeabit.com/2006-01-18/procesadores-3d-en-celulares

- En este foro se menciona que se está desarrollando un programa de benchmark para medir el rendimiento de OpenGL-ES en un dispositivo. http://pocketmatrix.com/forums/viewtopic.php?p=246425#246425

- Página cuasioficial de benchmarks de OpenGL-ES. Incluye lista de dispositivos disponibles comercialmente y sus puntuaciones. Se puede descargar previo registro gratuito. http://www.glbenchmark.com/index.jsp

- La consola PlayStation 3 implementa una versión ligeramente modificada de OpenGL-ES 1.0 que es casi la 2.0. http://www.noulakaz.net/weblog/2006/11/11/sony-playstation-3-released-in-japan

Desarrollo con OpenGL-ES


- Working Girl: 3D graphics. Parece ser el diario de un proyecto de programación en 3D que incluye móviles. Son Symbian, pero cuenta cosas interesantes que pueden servir. http://raeeka.blogspot.com/

- Entrada en un blog de un estudiante de Valladolid, que parece haber utilizado OpenGL-ES en su PFC. Contiene algunas reflexiones interesantes. http://blep.blogspot.com/2006/03/opengles.html

- Página sobre un curso de desarrollo con OpenGL-ES realizado en el SigGraph 2005. Contiene información sobre entornos, librerías, y herramientas. http://people.csail.mit.edu/kapu/siggraph_course/

- Yeti-3D. Librería para programar juegos con OpenGL-ES. Disponible para varias plataformas, con y sin aceleración. http://www.intuitex.com/yeti.html

- Mobiola 3D. Motor gráfico para crear juegos 3D, que implementa física, gráficos y sonidos. Necesita OpenGL-ES o Direct3D. En la página hay varios juegos que lo utilizan (simuladores de vuelo). http://www.warelex.com/games/engine.php


Ejemplos de videojuegos 3D programados con OpenGL-ES


- DoomGLES, el famoso Doom para PocketPC usando OpenGL-ES. En fase de desarrollo, hay también disponible otra versión no 3D que utliza la técnica del juego original para simularla (ray-casting). http://kokak.free.fr/DoomGLES.htm

- Quake III Arena programado con OpenGL-ES, corriendo en un teléfono Nokia N93 (uno de los primeros con aceleración gráfica) y en una PDA Dell Axim X51 (la primera en incluir aceleración gráfica). Incluye algunas capturas de pantalla. http://www.symbian-freak.com/news/006/12/quake3_n93.htm

- 3D Chopper Fight. Juego para PocketPC de simulación de helicopteros de radio control, que puede usar aceleración con OpenGL y Direct3D. http://www.omnigsoft.com/products/2005/ChopperFight/ChopperFight.html

- Jackpot Casino. Juego de casinos que puede utilizar la aceleración 3D de la Dell Axim X51. No menciona que utilice OpenGL-ES, pero parece probable al estar disponible para varias plataforms (PocketPC, Windows Mobile, Palm OS). http://www.mobile-stream.com/casino.html

- Emulador de la consola SNES para PocketPC que dispone de una versión para la PDA Dell Axim X51, con OpenGL-ES. http://leggnet.com/emulamer/

Videojuegos 3D que no usan OpenGL-ES


- CyberSarus. Motor 3D con efectos de iluminación; se puede ver en 'apaisado' en pantallas de 320x480; motor de audio 3D; enemigos con inteligencia artificial. http://www.darksungames.net/cbs.htm

- Head2Head racing. Simulador de coches 3D, que incluye física para controlar la suspensión y dirección del coche. Disponible para varios teléfonos (Nokia, Motorola, Palm) y resoluciones de pantalla. http://www.darksungames.net/h2h.htm

- Oval Racer. Otro simulador de carreras, con varios coches que corren al mismo tiempo con IA, física, y varias cámaras y posibilidad de cambiar el nivel de detalle. En la página hay un vídeo de demostración. http://www.oval-racer.com/index.html

Otros


- Visualización de datos en dispositivos móviles con aceleración gráfica. http://mobile.sdsc.edu