Apuntes de Arte Generativo

Nota
Este artículo se actualizó por última vez el 2023-06-22, es posible que el contenido no esté actualizado.
EN CONSTRUCCION
Esta página está muy lejos de estar completa, solo son apuntes sueltos para uso personal.
Referencias

py5, un port de Processing a Python

Requisitos

Para que todo funcione correctamente necesitamos:

  • Python 3.8
  • Java 17
  • La biblioteca de gráficos Cairo (esta es opcional, y yo ya la tenía instalada con apt install libcairo2-dev)

Instalación

  1. Instalamos la última versión de Python 3.8 (por precaución no instalo en la última versión de Python pero puedes probar)
1
2
pyenv install --list |grep 3.8.
pyenv install 3.8.15
  1. Creamos un entorno virtual
1
pyenv virtualenv 3.8.15 ve_py5
  1. Activamos el entorno e instalamos py5
1
2
3
4
pyenv ve_py5 activate
myve
pip install 'py5[jupyter]'
pip install cairosvg
  1. Instalamos java mediante python (asegúrate de que sigues en el mismo virtualenv)
1
2
pip install install-jdk
python -c "import jdk; print('Java installed to', jdk.install('17'))"

Con esto ya tenemos todo instalado. Podemos probar py5 con un programa sencillo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import py5

def setup():
    py5.size(200, 200)
    py5.rect_mode(py5.CENTER)

def draw():
    py5.rect(py5.mouse_x, py5.mouse_y, 10, 10)

py5.run_sketch()

Java 17

Yo uso Openjdk en mi linux:

1
2
3
4
5
java -version

openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

El Java 17 que hemos instalado se queda en ~/.jdk.

py5 no necesita configuración adicional para usar el Java 17, sabe donde tiene que buscarlo. Si por alguna razón quieres usar esa versión de Java para otras historias puedes añadir un alias, como el siguiente, al fichero de alias (~/.zalias.zsh)

1
2
3
4
5
6
# Java 17 installed in ~/.jdk
java17() {
    export JAVA_HOME="$HOME/.jdk"
    export PATH="$HOME/.jdk/jdk-17.0.6+10/bin:$PATH"
    java -version
}

Con ese alias podremos activar el Java 17 en nuestra sesión de terminal sin más que ejecutar java17

Modos de funcionamiento de py5

Modo module

Este se parece bastante al modo clásico de Processing. En este modo podemos crear las funciones settings, setup y draw. Ninguna es obligatoria pero en la práctica es raro que no necesites setup y si quieres algo dinámico te hará falta draw.

Un ejemplo típico de programa en modo module:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import py5

def setup():
    py5.size(300, 200)
    py5.rect_mode(py5.CENTER)

def draw():
    py5.rect(py5.mouse_x, py5.mouse_y, 10, 10)

py5.run_sketch()

En setup podemos invocar funciones de settings y ahorrarnos escribir esa función, pero todo lo que pertenezca a settings tiene que ir al principio de la función setup.

import py5
Ni se te ocurra hacer from py5 import * tendrás problemas con varias cosas. py5 no está programado para soportar este tipo de import que, en todo caso, siempre es poco aconsejable.

Modo Class

Nos permite crear Clases que heredan del objeto “Sketch” de py5.

Modo Imported

Imita el funcionamiento de Processing, sin imports ni prefijos en las funciones de py5. Sólo podemos usar este modo desde Jupyter tras instalar el kernel de py5

Modo Static

Para crear imágenes estáticas

openFrameworks

Nos bajamos los fuentes para linux 64bits desde la página web del proyecto, y las descomprimimos en un directorio para proceder a compilarlas.

No hay más que seguir las instrucciones de instalación para linux.

La instalación no es demasiado intrusiva si tienes Ubuntu 18 o mayor y una versión reciente del gcc.

Al instalar las dependencias añadimos los siguientes paquetes a nuestro sistema:

1
2
3
installing OF dependencies
OF needs to install the following packages using apt-get:
curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk-3-dev libopencv-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev

No te olvides de compilar también el Project Generator.

Structure Synth

Instalamos con sudo apt install structure-synth sunflow

Context Free Art

0%