sábado, 14 de abril de 2007

Limitaciones

En los últimos días he estado adaptando el código fuente de un cargador de ficheros 3DS para cargar el modelo del avatar. El fichero contiene la información de, entre otras cosas, las coordenadas de los puntos y de los polígonos que forman el modelo. Los primeros vienen como una lista de valores (x, y, z) y los segundos (que son triángulos) como una lista de referencias a los vértices que los forman.

Al hacer el programa que se ocupa de todas estas cuestiones me he encontrado con las primeras limitaciones que se esperaba surgieran en un proyecto de este tipo sobre un dispositivo de capacidades reducidas.

- La primera limitación es propiamente del entorno de desarrollo. En la función que carga el fichero 3DS se hace una llamada para averiguar el tamaño del mismo (filelength) que no está implementada en las librerías del Embedded Visual C++. Otras funciones similares tampoco funcionaban y he tenido que buscar otra forma de averiguar esa información utilizando solo funciones estándares.

- Algo similar me ha ocurrido con otra función de C, freopen, que quería utilizar para mandar la salida estándar a un fichero de texto de forma que pueda escribir en él mensajes de debug que me permitan saber qué está haciendo la aplicación cuando no se ve nada en la pantalla.

- Otra limitación ha sido de capacidad de proceso del dispositivo que utilizo para las pruebas (una PDA emulada). La función que carga el fichero 3DS escribe en la salida estándar cada chunk de información que va leyendo. Al ser muy numerosos el fichero de texto donde se iban escribiendo alcanzaba rápidamente un tamaño considerable para las prestaciones del aparato (más de 8 Mb). La solución en este caso fue simple, se limitó la información de salida a la estrictamente necesaria para saber si era o no correcto lo que se estaba leyendo.

- La otra limitación que he encontrado de momento es de la propia especificación de OpenGL-ES. Los tutoriales que estaba consultando para sabe cómo dibujar el modelo eran para la librería OpenGL original, y algunas funciones no existen en la versión para dispositivos móviles. Ejemplos de estas son glBegin, glEnd, o glVertex3f, que se usaban para construir los polígonos (triángulos) a partir de los vértices. En su lugar use otra función, glDrawElements, que también está disponible en OpenGL aunque parece que no es muy utilizada, a pesar de que es muy práctica ya que con una simple llamada se construyen todos los triángulos especificando únicamente una lista de vértices.

A raiz de lo que ocurrió en el último caso, he empezado a consultar la guía de referencia oficial de OpenGL-ES cada vez que tengo que usar una función nueva.

No hay comentarios: