jueves, julio 15, 2004

Mi primera aplicación OpenGL

Siguiendo con mis incursiones en software geográfico, decidí hacer mi propia implementación usando OpenGL y el control glxCtl que automatiza cosas tales como rotar la escena con el mouse (trackball). Con la ayuda de la abundante documentación, tutoriales y ejemplos en la red, fue relativamente fácil pasar de mi grotesca implementación PictureBox a una mucho más rápida implementación OpenGL en el plano (X,Y).

Me costó entender bien cómo funciona el mecanismo de tesselating. Sucede que cada país que dibujo, su figura, no es un polígono corriente. Tiene formas convexas (en angúlo cerrado hacia dentro) y cóncavas (en ángulo cerrado hacia afuera). A un nivel básico, OpenGL sólo maneja polígonos convexos. Pero existe una API OpenGL de nivel superior llamada GLU que permite dibujar un polígono cóncavo convierténdolo en varios polígonos convexos (triángulos, específicamente). Implementé un callback de combinación básico, pero en VB6 manejar punteros es una hazaña, así que me tomó un tiempo hasta dar con el procedimiento correcto.

Como si me gustara complicar las cosas ;) se me ocurrió, dado que OpenGL inherentemente es 3D, que bastaba con usar el conjunto de fórmulas apropiado para obtener el eje Z a partir de coordenadas (latitud, longitud). Y así fue: un globo terráqueo hueco apareció en mi pantalla ¿Y qué tal si, para simular el mar, agregaba una esfera azul bajo la superficie de mis continentes multicolores? La sorpresa fue mayúscula cuando vi el centro de cada país "sumergido" en la esfera, sobretodo en los de mayor superficie. Claro, los polígonos que tengo ahora no son totalmente esféricos, así que las partes planas atraviesan la esfera. Quisiera conseguir que cada país fuera como un trozo de cáscara de naranja, pero no me figuro cómo lograrlo, y tal vez el tesselating no sea el método más adecuado. Creo que la solución va por el lado de NURBS. Si alguien sabe cómo, le agradeceré eternamente su ayuda.

De todas formas, hice una pequeña demostración de mis avances al cliente y le gustó bastante. Explorando posibles aplicaciones, me contó de un programa llamado PurpleFinder. Permite saber en línea la ubicación de cada barco de la flota, su registro histórico y varias variables climatológicas. Vale la pena echarle un vistazo a la demo y jugar un rato, por ejemplo, haciendo click derecho en el mapa.