6.8 KiB
weight | title | date | draft | summary | categories | tags | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | Apuntes de Arte Generativo | 2023-02-01T11:00:40+0100 | false | Pues eso, apuntes sueltos de arte generado por ordenador |
|
|
{{< admonition type=warning title="EN CONSTRUCCION" open=true >}}
Esta página está muy lejos de estar completa, solo son apuntes sueltos para uso personal.
{{< /admonition >}}
{{< admonition type=info title="Referencias" open=true >}}
- Processing
- py5 un port de Processing para Python
- py5 source
- Install py5
- Generative Design Landing Page Un libro de arte generativo con muchos ejemplos de Processing
- The Nature of Code Un libro de Daniel Shiffman que se puede leer on-line. Simulaciones de procesos físicos con Processing
- Portando todos los ejemplos de Processing a py5 por Alexandre Villares
- Structure Synth
- Design for Complexity with Structure Synth
- Scripting in Structure Synth
- Context Free Art
- Generative Design The book on Github
- Generative Arts Links {{< /admonition >}}
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
- Instalamos la última versión de Python 3.8 (por precaución no instalo en la última versión de Python pero puedes probar)
pyenv install --list |grep 3.8.
pyenv install 3.8.15
- Creamos un entorno virtual
pyenv virtualenv 3.8.15 ve_py5
- Activamos el entorno e instalamos py5
pyenv ve_py5 activate
myve
pip install 'py5[jupyter]'
pip install cairosvg
- Instalamos java mediante python (asegúrate de que sigues en el mismo virtualenv)
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:
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:
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
)
# 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:
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
.
{{< admonition type=danger title="import py5" open=true >}}
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.
{{< /admonition >}}
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:
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