|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processing es un contexto para explorar el espacio conceptual emergente que nos entregan los medios electrónicos. Es un entorno para aprender los fundamentos de la programación informática dentro del contexto de las artes electrónicas y es un bloc de notas electrónicas para desarrollar ideas. www.processing.org El entorno de Processing es el más fácil compilador de Java / entorno de programación multimedia y gráfico conocido por el hombre. El sistema puede ser usado para producir piezas que arrancan localmente, como también Applets de java incrustados en la web. Deliberadamente, el programa está diseñado para hacer un puente entre la programación gráfica educacional, y el java "real". Processing puede ser utilizado como rueda de entrenamiento, pero no tiene por qué ser eso. El propósito de este manual es introducir a los usuarios de Flash Macromedia y Director al entorno de Processing a través de la comparación y el contraste de los sistemas. La teoría dice que el conocimiento adquirido a través de las herramientas de Macromedia puede ser fácilmente transferido, reduciendo la cantidad de clases necesarias. Se asume que tienes un conocimiento básico de alguno de los productos de Macromedia. Hacia el final de este manual deberías ser capaz de producir tus propias piezas de Processing (Java). Índice Introducción Obtener el software de Processing Un paseo por la interfaz Manipulación de medios a bajo nivel Estructura sintáctica Gráfica 2D estática Tiempo y movimiento Ratón & teclado Presentación / Exportar Dibujar archivos de imagen Formas 3D Píxeles Tipografía El futuro |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Actualmente, en clases interactivas de diseño digital, el vehículo educativo dominante ha sido Flash o Director. Los estudiantes están empezando a realizar trabajos geométricamente dinámicos y algorítmicamente más complejos influenciados por trabajos realizados en entornos diferentes a los suyos. En ITP, atestigüé un experimento en una clase (claro, que desde entonces están usando Processing). En medio de la enseñanza de Director Lingo, un intensivo de una semana a la programación en Java introduce a los alumnos a un lenguaje diferente a Lingo – con la esperanza que adquieran una visión más diversa de distintos sistemas de programación. Se les entregó una plantilla y ellos simplemente cambiaron el código. Luego de una semana de confusión algunos de los estudiantes quedaron con una sensación de vacío, anhelando saber más de Java. No hubo manera de explicarles que un curso de Java promedio en una escuela, frecuentemente te tiene trabajando en una consola de texto y que tiene poco o nada de relación con gráfica de Applets al menos que sea un curso específicamente enfocado para enseñar eso. En la lección siguiente, espero hacer un puente sobre este hueco académico con la ayuda del entorno de Processing. No está pensado como un reemplazo a aquellos cursos de Java sino un suplemento que se preocupa de la logística, sin profundizar en los matices sintácticos. Además, Processing y Java no son presentados como el siguiente nivel después de Macromedia, tampoco como un sistema de nivel inferior. Son simplemente una alternativa capaz de hacer cosas de modo distinto. Si actualmente asistes a un curso de Java, es posible que uses Processing en tus trabajos, dependiendo de la flexibilidad de tu profesor. Este manual es una mezcla entre mi redacción e imágenes y otras encontradas en el sitio de Processing que mantienen Casey Reas y Ben Fry. Te familiarizarás con estos nombres en la medida que te hagas usuario de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processing es libre (libre como la cerveza gratis, libre como la libertad de expresión, libre como un país libre) y todavía en desarollo. Seguirá siendo libre incluso después de ser terminado. Este software está actualmente en la fase BETA. Los errores están siendo reparados y otros aspectos están siendo agregados. Para descargarte el programa de instalación de multiplataforma, puedes mandar un email a los desarrolladores para unirte a la comunidad de testeo. En la página de Processing, pincha Download para más instrucciones. Además hay un fluido sistema de mensajes entre los testeadores. Es altamente recomendable que te crees una identificación de entrada (login) para ti mismo. La comunidad que se ha creado a su alrededor es la mejor manera de recibir ayuda en cualquier materia, de otros miembros de la comunidad de testeo, de los mismos autores y de otros empollones informáticos como el autor de este artículo. Es importante señalar que esta comunidad en línea ayuda a desarrollar Processing a través de la discusión de aspectos en los foros. En la página de Processing pincha Discourse. Tanto la página de Processing como el software están constantemente siendo actualizados. Ve revisando por nuevas actualizaciones y versiones del software. Justamente ahora es un momento muy emocionante! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para mayor y más detallada información acerca del entorno de Processing, ver la referencia de Entorno de Processing.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En Director, uno importa o crea medios dentro de un reparto, luego lo arrastra hacia un escenario donde existirá como un actor. En Flash, uno también importa o crea medios dentro de una librería y luego los instancia como clips de películas a un escenario similar. En Processing (y en Java) esta importación de medias está realizada en código, de manera similar como trabaja HTML. Adicionalmente, cualquier medio personalizado que tu inventas (sistema de vectores, datos DNA, muestras de colores de una película) todos pueden ser insertados como parte del código Java. De hecho, no estás restringido a tener cualquier imagen externa o sonidos si quieres mantener todo en un archivo ordenado, porque el píxel de tu imagen también puede convertirse para ser parte de tu código, y los datos de sonidos también pueden ser almacenados como un largo array de datos. El beneficio de una librería o reparto es para tener mayor control sobre el formato, para ahorrar espacio en el disco / memoria, y también para agregar características apuntables&cliqueables hacia un metafórico sistema de archivo común. El beneficio del actor o de la película es que un objeto visible y tangible puede estar en la pantalla y ser una manera fácil para que la gente cree botones, video juegos, caracteres, elementos individuales gráficos y otros elementos visuales y controlables de espacio positivo. De todas maneras, creando grupos de cooperación de elementos y objetos que no son ni de espacio negativo ni positivo, esta metáfora se ha convertido en carga para algunos. En Processing, esta complicada capa no existe; hay solo teclado, ratón y una serie de eventos en conjunción con rutinas básicas de dibujo. Uno se ocupa de redibujar la escena repetidas veces para introducir cambios y tiempo. En esta materia, es tu responsabilidad el escribir tu propio sistema de actor o película, pero no te lo requerirán. Inventa otra metáfora que será más útil para ti como artista. También contribuirás para diversificar con profundidad la estética de aquellos trabajos en cuales usualmente vemos la influencia de Macromedia. En las siguientes secciones de esta guía, introduciré métodos para renderizar la imaginería a la pantalla. Luego introduciré una animación. Finalmente, te mostrare como agregar animación con el ratón, teclado y el puerto serial. Estos son los pilares básicos para cualquier cosa que quieras hacer con las herramientas de mayor nivel. Serás capaz de hacerlos en Java si te focalizas en construirlos tu mismo. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Para los que usan Flash MX esto es un repaso. Lo siguente se llama StatementsComments en los ejemplos.
Y las variables de Java son como a continuación:
Personas
que usen Flash: No hay nada como var. Para mayor información de
variables, consultar la guía oficial de lenguaje Java.
Las
cosas son un poco diferentes a Lingo si hay que comparar. El
programador usa un sólo “=” para asignar a una
variable un valor. Uno usa “==” (doble igual) cuando
intenta determinar que si un número es igual a otro
número o no. “No igual a “ no es más
“<>”, ahora es “!=” y los demás
son los mismos ("<" , ">" , ">=" , y "<="). Para
información en condicionales, consulte a la autoridad.
Usuarios
de Lingo, esto es los mismos que “repeat with i=0 to 4”.
Dentro de estos paréntesis hay tres declaraciones separadas por
dos punto y coma. La primera declaración crea una variable
temporal. La segunda declaración especifica la condición
que permite al bucle continuar su repetición. A penas i no es
más menor que 5, el bucle se detendrá. La tercera
declaración te dará la posibilidad de incrementar i
como desees. “i++” es la abreviación de “i =
i+1”. Sun podrá contarte más acerca de los bucles.
Si
estás curioso de saber más de la sintaxis de control de
flujos, aquí hay un link del manual de lenguaje de Java. La parte de control de flujos. Para una mayor introducción a las estructuras, mira la Comparación de Lenguaje Processing y los Ejemplos de Estructura de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Permítenos descomponer este código línea por línea.
Como puedes ver, esto es similar a draw()
en Lingo, o aquellos métodos de dibujo en ActionScript.
Tú controlas la pantalla como si fuera un lienzo que entiende
ciertas operaciones de dibujos. Permítenos desarrollar formas más complejas.
Aquí hay unas formas prefabricadas.
triangle(triángulo)
dibujará un polígono de tres puntas. Tiene seis
parámetros. Parámetros 1 y 2 son los primeras coordenadas
X,Y. Parámetros 3 y 4 son las segundas coordenadas X,Y. Los
parámetros 5 y 6 son las terceras coordenadas X,Y.
Ahora
puedes ver el cuadrado debajo del óvalo porque sólo los
trazos han sido dibujados. De manera similar, existe un noStroke
(no trazo), que deshabilita los bordes de ser dibujados . Para
habilitar el trazo o el llenar una vez más debes llamar el trazo
o el llenar especificando un color.
Aquí hay algunos ejemplos de Processing.org
Para más detallada información acerca de vectores de dibujos, ver los ejemplos Form de Processing, la referencia de formas de Processing. Hay mucho más para dibujar e interpretar en la pantalla, pero yo sólo te he dado las rutinas de dibujo 2D para así poder cubrir animación e interactividad. Luego volveremos a los otros métodos de dibujo. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
En Director hay un marcador. Te asignan una cabeza lectora y métodos tweening para actores. Cosas como el vídeo, incrustaciones de Flash, QTVRs y sonido parecen animar en su propio espacio-tiempo. Si trabajas en algo más que una animación dinámica puedes utilizar un fotograma y código en respuesta a un evento ExitFrame o PrepareFrame. En Flash, te dan una linea de tiempo y un soporte de tweening más complejo que en Director. Aquellos que eligen trabajar completamente en ActionScript comúnmente usan dos marcos – uno para ajustar y para llamar un marco de repetición y otro para repetir para siempre. Actionscript también te permite responder en código con un onClipEvent (enterFrame). Processing no tiene línea de tiempo, marcador o métodos de tweening, a menos que decidas estructurar tu código así. Como Lingo y Actionscript, Processing te permite responder a un evento de progresión de fotogramas con tu propia rutina de dibujo. Hasta ahora te he mostrado el código de Processing en Modo Básico, que es para imágenes estáticas. Es un lista de elementos visuales. Processing tiene tres modos de operación: básico, estándar y avanzado. Modo Java es Java convencional, sin las ruedas de entrenamiento. Para comenzar con tiempo y movimiento iremos a Modo Continuo. Si has estado pinchando los enlaces de este texto, debes haber visto uno o dos programas en modo estándar Processing. Aquí hay un ejemplo simple:
Una sección setup( ) opcional arranca cunado el programa empieza. La sección de bucle draw( ) arranca para siempre hasta que termina el programa. En Lingo setup( ) es similar al beginSprite o startMovie - y draw( ) es similar a ExitFrame o PrepareFrame. En Flash, setup( ) es similar al primer marco de animación que sólo se ejecuta una vez, luego llama al bucle. setup( ) y draw( ) son ambas funciones. También puedes escribir tus propias funciones para organización y encapsulación de complejidad . Para mayor información sobre como escribir funciones personalizadas en Java, mira el tutorial de lenguaje de Java - Implementing Methods section. Una vez que hayas escrito la primera función en Processing, ese programa cambiará automáticamente al modo estándar. Cualquier declaración fuera de su función que no sea variable de inicio no funcionará más cuando presiones play. Puedes mover este código hacia setup() o draw(). Si quieres que una variable sea global (significando que conserva su valor fuera del alcance de las funciones) entonces declara la al comienzo del programa, fuera de ambos draw() y setup(). En el ejemplo arriba, la variable x fue declarada global. En Processing, la función de framerate(n) se puede utilizar para retrasar o para acelerar el bosquejo entero, pero es ciertamente posible mover cosas en diferentes velocidades simplemente variando la cantidad que incrementas, o usando floats y solamente agregando una fracción a ellos. Para un control más a largo plazo y a tiempo más exacto, Processing da el acceso completo a la medidas occidental de tiempo. year( ) // año actual, p.ej. 2002, 2003, etc. month( ) // mes actual, de 1..12 day( ) // día del mes, de 1..31 hour( ) // hora actual, de 0..23 minute( ) // minuto actual, de 0..59 second( ) // segundo actual, de 0..59 Una función especial llamada millis( ) devuelve el número de milisegundos (miles de un segundo) desde comenzar el applet. Esto es comúnmente usado para secuencias animadas temporizadas. millis( ) // número de milisegundos desde el comienzo del applet. También es posible hacer que tu applet espere al usar la función e demora (delay). Usar esta función puede ajustar efectivamente los tempos (frame rates). delay(40); // hace una siesta de 40 milisegundos
Esto no es un ejemplo muy bonito pero es fácil de entender. Para ejemplos de tiempo más bonitos (y complejos) mira Milliseconds, de REAS. Para más ejemplos de movimiento animado, véase los ejemplos Motion de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El acceso al ratón y el teclado son similares al modo que lo hacen Flash y Director . En Lingo, el ratón es direccionable con the mouseLoc, the mouseH, y the mouseV. Además hay también manejadores de suceso de ratón como on mouseDown. En Flash, hay onClipEvent (mouseDown), etc. En Processing, la función mousePressed( ) se llama cada vez que el ratón es presionado y el método mouseReleased( ) es llamado cada vez que el ratón es liberado o dejado de presionar. Lo que debes hacer es agregar la función a tu código, así como en draw( ).
Para más información de ratón, mira la referencia del raton de Processing, y no te olvides de revisar estos ejemplos Mouse de Processing. La entrada del teclado es igual a Flash y Director.
La entrada del teclado también puede ser distribuida como un event handling function.
Para mayor información de entrada de teclado, mira la referencia del teclado de Processing, y no olvides de revisar estos ejemplos Keyboard de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cualquier programa de Processing puede ser publicado como un applet de Java. Primero asegúrate que el bosquejo (sketch) está salvado, luego escoge File -> Export, o presiona Ctrl+E (o presiona el botón de exportar). Verás el área de mensajes de Processing diciendo "Exporting. . ." por un momento y luego dirá "Done Exporting." Para tener los archivos de la web, entra a la carpeta de bosquejos de Processing. Busca la carpeta con el nombre de tu bosquejo y ábrela. En esa carpeta verás otra llamada applet. Esta carpeta puede ser subida a la web. Recomiendo altamente editar el index.html predeterminado que se genera desde Processing. Debes mantener todos los archivos relativos al HTML en esta carpeta applet, ya que están relacionadas de un modo que ninguna otro medio HTML está relacionado. sketches/ your_sketch_name/ applet/ your_sketch_name.java your_sketch_name.class your_sketch_name.jar index.html save( ) and saveFrame( ) Si necesitas exportar formatos no-interactivos, es posible hacer archivos .tif de la ventana de Processing usando la función saveFrame( ) (guardar fotograma). Ubicando este método al final del bucle draw( ) guardará la imagen en la pantalla. Si saveFrame( ) es llamado numerosas veces, creará una secuencia de imágenes como la siguiente: screen-0001, screen-0002, screen-0003, etc. Usando save( ) (guardar) te permitirá elegir un nombre de archivo. Es simple importar estas imágenes al Quicktime y otro programa de vídeo para hacer una documentación animada de un programa de Processing. Aunque Processing tiene incorporado esta fácil función de guardar imágenes, también es posible exportar otros formatos con un poco más de trabajo. Por ejemplo, aquí hay un programa de Processing que exporta a Adobe Illustrator. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lo guardaré en una carpeta apropiada:
PImage es un objeto que mantendrá tu archivo cargado hasta que lo dibujes. b es el nombre que escojí. image( ) es lo que dibuja la imagen a la pantalla. image(PImage,
x, y, width,
height); También puedes elegir el omitir el ancho y alto y la imagen se dibujará a escala normal. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vertex(x, y, z); line(x1, y1, z1, x2, y2, z2); bezierVertex(x, y, z); curveVertex(x, y, z); box(size); box(width, height, depth); sphere(size); Processing actualmente tiene tres modos de rendering. Si no especificamos ningún modo en la función size() – como hecho en todos los ejemplos hasta ahora - usamos el el rendering de Java 2D. Para usar funciones de 3D hace falta especificar el rendering de la siguiente manera: size(100,100,P3D); //P3D define el modo de rendering para 3D Este modo también da soporte a todas las funciones de 2D y además supone ser más rápida que el rendering 2D. Además existe otro modo de rendering llamado OpenGL. Más información sobre el los modos de rendering encuentras en esta página de Processing.
Nótese que box (caja) y sphere (esfera) no te piden que especifiques coordenadas. En estos ejemplos, es necesario usar translate y rotate. También hay scale, y un par de funciones llamadas push y pop que te permiten marcar tus traslados en una moda muy organizada. Para mayor información ver la referencia de transformaciones de Processing y los ejemplos Transform de Processing. Si no te importan estas transformaciones, siempre hay una solución. Nótese el uso de lights( ) y noLights( ). Usar luces renderizarán la forma 3D de un modo que sugerirá sombreado. Para más información, mira la referencia de luzes de Processing. "¿Qué? ¿Esto es para 3D?" Si crees que esto no es suficiente 3D para permitirte hacer cosas interesantes, entonces mira las cosas que han hecho en la exposición de Processing. Y esto es sólo el comienzo. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El control sobre los píxeles está actualmente lejos de Flash .SetPixel y GetPixel recién han sido añadidos a Flash y Director (y un conocido artista interactivo, amante de Director ha adoptado el apodo de SetPixel). Estudiantes del ITP van a un curso dictado por Danny Rozin llamado El Mundo – Píxel por Píxel,(The World - Pixel by Pixel), y continúan programando en C porque es la única manera suficientemente rápida para alcanzar las metas conceptuales (Siendo Actionscript, Lingo y MAX las únicas alternativas). Es común entre estos estudiantes de ITP prepararse para el curso de Danny's yendo a un curso C. Trabajar en píxeles de Processing es considerablemente más rápido que en Lingo, y mucho menos complejo. Aunque Java no se compara a la velocidad de C, pronto los estudiantes de Danny podrán explorar la posibilidad usando Processing para acelerar la curva de aprendizaje. get(x, y); // Returns an integer set(x, y, color); pixels[index]; // Array containing the display window
Controlando los píxeles, también puedes implementar tus propias rutinas de dibujo. Por ejemplo, aquí hay transparencia. Escribir el resto de las tintas (inks) de Director no será duro. Aquí hay una función de línea de puntos (dotted line). Para más información de píxeles mira la Preferencia de imagenes de Processing y los ejemplos Image de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El sistema de renderizado de tipografía usa un formato de archivo de carácter específico de Processing. Los creadores del software han incluido un tipo de función de importación de tipo de letra en el menú para ayudarte, y además han dotado al programador de Processing con una gama de tipos de letra para escoger. Pincha aquí para ver los tipos actuales. Estas fuentes están almacenadas como imágenes bitmap. Aquí hay un ejemplo muy sencillo de renderizar texto al bosquejo. Arranca este programa y espera equivocarte.
Os saldrá un error diciendo que no puede encontrar Bodoni-Italic.vlw.
Esto es porque no has importando aún la fuente a tu carpeta de
data. (la sección de imagen de este manual tiene más
información de la carpeta de data). Usa la función de
creación de fuentes del menu Tools -> Create Font...
para copiar fisicamente el archivo de fuentes a tu carpeta data.
Ahora el programa arrancará bien luego de haber hecho eso. textFont(f, size); determina la fuente actual y su tamaño antes de dibujar el texto. text("handglove", x, y); renderiza el texto en el lugar. Este ejemplo incorpora rotación, y un simple bucle for.
Si no te interesa esto porque no te va el rollo de tipografía hay un modo más simplificado. Si necesitas algo como un campo de entrada de texto es útil que escribas tu propio.
Muchos widgets de usuarios de interfaces no son difíciles de
agregar al proyecto si piensas de ellos como ejercicios
pequeños, modulares e interactivos más que algo que el
sistema operativo proveerá exclusivamente. Lo que ganas es el
control último sobre el diseño. Para más
reinvenciones de interfases vernaculares mira los ejemplos GUI de Processing. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
última actualización 30 de Mayo, 2006 |