martes, 27 de agosto de 2019

Reviviendo una vieja funcionalidad de ZinjaI

En algunos prácticos de computación gráfica les damos a los alumnos programas que implementan algo visto en teoría para que experimenten: a) cambiar cosas, predecir el resultado y validar la predicción; b) pensar un resultado, deducir qué hay que cambiar, y validar la deducción; o c) si todavía no pueden predecir ni deducir nada, cambiar al azar y observar para desarrollar una primer intuición de qué hace cada cosa. Entonces, quiero programas donde sea fácil y rápido cambiar cosas.

Podemos empezar por decir que para cambiar el estudiante debe modificar el código, pero eso puede hacer que el loop de retroalimentación sea lento y tedioso. El plan B es programar alguna interfaz; pero como usamos bibliotecas muy simples (como FreeGLUT), no hay widgets o similares. Las alternativas parecen ser: a) programar controles propios, pero entonces es más código accesorio para ensuciar el ejemplo; b) usar mejores bibliotecas, pero entonces agregamos otra dependencia. Pues bien, ZinjaI viene al rescate con una tercera opción.


Rearmando un TP para este año, consideré agregar alguna dependencia como ImGUI o similar, ya que algo como QT o WX parece una cañón para matar un mosquito, y además agregan mucho más código accesorio y potenciales problemas con la instalación. Luego pensé en programar mi propia mini-gui, pero al final recordé una funcionalidad de ZinjaI que agregué hace mucho y que nunca había usado seriamente: la edición de inspecciones durante la ejecución.

Esta funcionalidad me permite modificarle al programa los valores de variables mientras se está ejecutando (corriendo, no pausado). El procedimiento, para el usuario, consiste en pausarlo una vez, abrir la inspección con este editor especial, y luego reanudar la ejecución. A partir de allí, cada vez que se cambie algo en ese editor (y se presione Enter), ZinjaI pausará la ejecución, modificará la variable, y retomará la ejecución; lo más rápido posible para que parezca que en realidad hizo el cambio sin detener nada. El resultado es bastante bueno.


Este ejemplo en concreto tiene que ver con entender el modelo de iluminación de Phong, con poder modificar las propiedades de la luz, del material y otros coeficientes, para ver cómo cambia la escena. Mi solución es poner todo lo que quiero poder modificar en unos pocos structs (es mucho para uno solo), hacer una inspección para ese struct, y mostrarles a los alumnos cómo abrir ese editor. Así obtengo "gratis" (sin agregar código) lo que necesito.

Tan poco usaba esta funcionalidad hasta ahora, que la había roto hace tiempo en alguna actualización y no lo había notado. Ahora, desde hace algo así como un mes, está resuelto. Si ZinjaI revienta al intentar abrir el editor de la inspección, es que deben actualizarlo.


Cuando empecé ZinjaI, mi objetivo era hacer que las funcionalidades de depuración sean el sello más distintivo, y especialmente desde el punto de vista didáctico. Eso no se cumplió, la mayoría de las funcionalidades resultaron bastante básicas, y pronto noté que no era para nada eficiente hacer lo que pretendía (a veces hasta imposible), así que fue mutando a lo que es hoy. Peeero, cada tanto, este tipo de pequeñas cosas me encarrila de vuelta en ese camino.

Espero no ser el único que ve la utilidad de esto y que más docentes y usuarios en general puedan aprovecharlo.

2 comentarios:

  1. Hola MAESTRO aunque no te conosca, he usado al zinjai y me he sentido basttante comodo...ahora estoy tratando de ver como instalar SDL para zinjai para crear un videojuego en C. ¿Por que crear un videojuego en C? por mera diversion y porque tambien a mi proyecto de universidad queria insertarle imagenes y musica, y halle SDL para esto...y dije...y porque no en estas vacaciones crear un videojuego con el LENGUAJE que me HIZO sufrir...pero me HIZO FUERTE, frente a otros lenguajes. Assi que nada si puede comentarme como poner el SDL en zijai agradecido :) Saludos desde el norte de argentina SALTA. :D

    ResponderEliminar