Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Archivos gráficos como entrada y salida de programas

–Arte sintético y algoritmos que dibujan–

Uno de los mayores problemas que he tenido relacionados con la programación gráfica es como separar los algoritmos de las particularidades de las plataformas en que corren. Pues un algoritmo puede tener décadas de haberse inventado pero un hardware dura en funciones cuando mucho cinco años y al paso del tiempo se olvida. Y la clave para que ese algoritmo sea util es saber implementarlo en cada plataforma para aprovechar sus muy particulares e irrepetibles capacidades. Es por eso que muchos de los programadores viejos como yo que les interesan estos temas también saben de ensamblador porque en otros tiempos era necesario conocer bien el hardware para hacer gráficas mínimamente decentes. Y en mi caso particular en el que quiero explicar estos temas la cosa se complica porque sacar información de un programa que maneje gráficos en tiempo real y ponerla en un documento escrito es bastante dificil. Por eso estoy pensando que usar archivos gráficos tiene alguna ventaja en este caso.

Antes de comenzar quiero contarles una historia de cuando comencé a programar. Como algunos ya saben mi primer libro serio de programación fue un libro de algoritmos del que con mucho trabajo podía medio entender las explicaciones escritas pero que los códigos de ejemplo y las ilustraciones me parecian mensajes de los extraterrestres. Obvio pasó mucho tiempo para que el primero de esos algoritmos corriera en un programa escrito por mi. De los dibujos del libro los únicos que medio pude entender fueron los de la sección de algoritmos geométricos y en esa sección recuerdo una parte que decía más o menos así:


«Cuando decimos que un algoritmo dibuja una figura no lo decimos en sentido figurado. ¡Realmente el algoritmo la dibuja! Si estos algoritmos los cargamos en la memoria de una computadora con hardware capaz de dibujar en papel lo que obtendremos será un papel con la misma imagen que aparece en este libro»

A décadas de haber leido eso vino a mi mente la solución para manejar y explicar algoritmos gráficos de manera independiente de la plataforma en un lugar donde lo único con lo que cuento es con texto y algunas imágenes estáticas: Hay que sacar las imágenes producidas por los algoritmos a archivos de imagen digital en lugar de mandarlos a la pantalla. Esto reduciría la complejidad final del programa porque no tendría necesidad de darle capacidades interactivas de entrada y salida ni meterme con el sistema operativo más de lo absolutamente necesario para leer y escribir archivos y el resto sería programación de toda la vida.

Si, ya se que quienes aprendieron a programar después de la invención del DirectX y las primeras GPU creen que un programa de computadora que no los use lo único que puede hacer son matemáticas básicas y escribir lineas de texto.Pero no saben que la capacidad de hacer cuentas y copiar números de un lado a otro es todo lo que un programador necesita para hacer todo tipo de gráficas y animación y sacar por archivos de imagen es la mejor opción para hablar de estos temas en un blog de internet o hasta en un libro impreso. ¿Pero por qué no lo había hecho antes?

Muchos gamers saben que hay juegos que permiten tomar capturas de pantalla pero pocos saben que esto se inventó como una forma de detectar errores en el programa. Y si bien ya había hecho códigos capaces de hacer esto no tenía un «juego» que mostrara información en forma gráfica con tanto detalle y de haberlo hecho la función que lo hiciera iba a ser mucho más complicada que el propio código del juego y eso sin mencionar que hubiera necesitado ‘assets’ bastante grandes para mostrar esa información.

Manejar por archivos de imagen tendría un único problema y es que el código no sería tan rápido como una verdadera imagen en tiempo real. Aunque podría separarlo de tal forma que el mismo código que genere las imágenes sea el que corre en los juegos y mantener fuera de este la parte que construye el archivo de imagen final. Otra ventaja es que no estaría limitado a lo que el código del juego pudiera mostrar en pantalla y podría generar todo tipo de información gráfica a partir de los datos digitales de los archivos. Por ejemplo sería posible mostrar estructuras de datos como grafos o árboles con círculos y flechas o en el caso de estructuras de control de animación que usan punteros para conectar sprites podría mostrar esos sprites unidos por lineas. Y lo mejor de todo es que esos archivos gráficos podría usarlos para explicar cosas en internet. Por ejemplo podría continuar la serie sobre programación gráfica pero esta vez usando esos archivos de salida en lugar de fotografias de papel y escrituras en pizarrones. Que si bien en su tiempo funcionaron para conceptos muy básicos no fueron suficientes para explicar cosas más avanzadas que una proyección en perspectiva de un modelo básico en wireframe. Ahora podría mostrar algoritmos más avanzados como los de iluminación y textura que aunque hubiera podido implementarlos en papel el dibujar esas imágenes a mano implementando el algoritmo me hubiera tomado horas o hasta dias. Con este sistema podría obtener una imagen lista para postear en el blog en menos de un minuto y si usara GIFs animados hasta podría mostrarlos en forma animada en ese mismo minuto. Lo único que necesitaría es implementar el algoritmo en código, escribir datos en un archivo de texto y luego podría crear todas las imágenes que quisiera.

Aquí iba a poner un rant para trollear pero de hacerlo arruinaría mis planes. Lo único que puedo contarles sin fastidiar el proyecto es que este sistema que crea archivos gráfico a partir de instrucciones es parte de un software que llevo programando desde hace unos pocos meses y cuando alcance un cierto nivel pienso hacerle una Prueba de Turing en la que lo haré pasar como un artista del webcomic. Si otros artistas aficionados detectan que los dibujos son hechos por un software autónomo fracasará. Pero si creen que se trata de un humano y hasta lo trollean habrá pasado la prueba. Obvio para hacerla de emoción buscaré hacer la prueba en un lugar donde se suban webcomics de muy pero muy baja calidad y los comentarios sean especialmente agresivos. Pero eso será para cuando el sistema pueda crear por si mismo dibujos decentes. Por ahora lo único que hace y hace bastante mal es desplegar datos en forma gráfica y mostrar algunos sprites del modo como los manejarían mis intentos de código juego. Pero eso es mucho más que suficiente para continuar mis aventuras y sobre todo tener imágenes para explicar conceptos o para decorar el blog en lugar de tener que pasar horas en el paint ni robármelas de internet.

noviembre 17, 2016 - Posted by | Uncategorized

No hay comentarios aún.

Deja un comentario