Table of Contents

Einstieg in Processing

b01_p5_logo.jpg In dieser Workshopreihe dreht sich alles um das Gestalten von genarativen und interaktiven Systemen mittels der open source Umgebung Processing. Sie ermöglicht Interessierten, ohne Programmierhintergrund, einen schnellen und simplen Einstieg in das Arbeiten mit Code – für einen grafischen Output. Ohne aufwendige Vorbereitung erlaubt Processing das Zeichnen von grafischen Elementen und die Verwendung von Input, z.B. durch Maus und Tastatur.
Das Projekt wurde von Ben Fry und Casey Reas 2001 am MIT ins Leben gerufen. Inspiriert von John Maeda's 1999 entstandenem Projekt Design by Numbers sollte es als visuelles Sketchtool für Designern dienen, um neue Denkweisen neben der bekannten Informatik zu erzeugen. Schnell wurde die Umgebung von vielen Künstlern nicht nur im Entwurfsprozess, sondern auch in ganzen Installationen und Ausstellungen genutzt.

Processing basiert auf der 'höheren' Programmiersprache Java, vereinfacht deren Schreibweise und minimiert den Schreibaufwand beachtlich. Dennoch ist der Sprung zu weiteren Sprachen wie Java, ActionScript oder JavaScript ein geringer. Der Kernpunkt ist das Verständnis für die Formulierung der sog. Syntax (der Programmanweisung) und die logische Strukturierung von Programmabläufen. Alle aktuellen Sprachen ähneln sich in diesen Punkt stark.

Das Programm

b01_p5_application.jpg Als Applikation ist Processing ein Texteditor mit kleinen Zusatzfunktionen die grundlegende, programmierspezifische Aufgaben erfüllen. Im Vergleich zu Entwicklungsumgebungen wie eclipse und netbeans bedarf es keiner aufwendigen Projekteinrichtung und Konfiguration bevor die ersten Schritte gemacht werden können. Kostenlos verfügbar für Mac, Linux und Windows kann es im Downloadbereich der Processingseite runtergeladen werden. Vorraussetzungen sind eine aktuelle Java- und QuickTime-Version. Teilweise benötigen Plugins (sog. Libraries) systemspezifische Zusatzdateien, die jedoch immer mitgeliefert werden.

Der Kern des Programmfenster stellt der Texteditor dar. Alle Bestandteile der hier geschriebenen Anweisungen werden zur besseren Lesbarkeit eingefärbt. Über dem Editor befindet sich die Menüleiste mit den gewohnten Optionen 'Öffnen', 'Speichern' bis hin zur Pluginverwaltung und Ausgabe des Sketches. Einige der essentiellen Funktionen, wie z.B. das Ausführen des Programms, sind zwischen Menüleiste und Texteditor als Icons angesiedelt. Beim Starten der Applikation springt ein zweites Fenster auf in dem der Sketch abgebildet wird. Alternativ kann das Programm auch mit der Tastenkombination Apfel+r ausgeführt werden. Im späteren Verlauf kann es zu mehreren Textdokumenten für ein Programm kommen. Direkt über dem Texteditor befindet sich zu diesem Zweck eine Tab-Leiste um diese aufzulisten.

Zeichenfläche

b01_cord-system.jpg Als Basis zum Zeichnen in Processing ist das Sketchfenster in ein kartesisches Koordinatensystem unterteil. Horizontal befindet sich die x-Achse am oberen Fensterrand und die y-Achse vertikal an der linken Außenseite. In der oberen-linken Ecke ist der Punkt x=0,y=0 (Koordinatenursprung). Von dort aus breitet sich das Koordinatensystem auf der x-Achse nach rechts und auf der y-Achse nach unten aus. Positions- und Größenangaben werden in der Einheit Pixel (ein Bildschirmpunkt) vorgenommen – demnach ist der xWert für den Punkt in der oberen-rechten Ecke die Breite des Fensters in Pixel. Beide Achsen dehnen sich ebenfalls in den negativen Wertebereich noch links bzw. rechts aus. Auch diese Koordinaten können beim Positionieren angegeben werden, je nach Größe der grafischen Objekte rutschen diese aber aus der sichtbaren Fläche und werden nicht dargestellt.

Neben dem zweidimensionalem Raum können unter Hinzunahme der z-Achse dreidimensionale Abbildungen erzeugt werden. Die dritte Achse verläuft ebenfalls durch die obere-linke Ecke. Bildlich gesehen geht sie durch den Bildschirm, wobei sich der positive Wertebereich hinter dem Bildschirm befindet. In den folgenden Lessons konzentrieren wir uns auf das Gestalten mit Code in 2d.

Größe des Sketchfensters

Die Größe der Zeichenfläche lässt sich mit dem Aufruf des Befehls size() festlegen. Processing passt die Ausgabefläche anderenfalls auf 100×100 Pixel an. Damit diese Einstellung funktioniert, braucht das Programm zwei Informationen von uns. Wie breit und wie hoch die gewünschte Zeichenfläche sein soll. Bei Positionen und Größen im 2d-Raum wird immer erst der Wert auf der x-Achse und danach der y Wert genannt (demnach erst die Breite, dann die Höhe). Beide Werte kommen als Parameter zwischen die beiden runden Klammern, die dem Begriff size folgen.

Visuelle Grundelemente

Punkt

b01_point.jpg Ein Punkt ist das simpelste Element der primitiven Grundformen. Nur mit einer x und einer y-Koordinate nimmt er, ohne spezielle Angaben, die Fläche eines Pixels auf dem Bildschirm ein. Die für die Füllung verwendete Farbe kann mit stroke() festgelegt werden.

Linie

b01_line.jpg Als zweites Element lernen wir die Linie kennen. Als eine Reihe von Punkten erstreckt sie sich zwischen einem Anfangs- und einem Endpunkt. Um eine Linie zu zeichnen verwendet man den line() Befehl. Dieser hat genau vier Parameter, zwei Werte für den Anfangs- und zwei für den Endpunkt.

Rechteck

b01_rect.jpg Der Befehl rect() ermöglicht das Füllen bzw. Umranden einer rechteckigen Fläche. Bestimmt durch den oberen-linken Punkt dehnt dich diese nach rechts-unten aus. Dafür benötigt Processing neben der x und y-Koordinate zur Punktbestimmung die Breite und Höhe des Elements.

Alle Außenkante des Vierecks bleiben beim Aufruf von rect() immer parallel zur x bzw. y-Achse. Um dies zu umgehen kann für das freie Zeichnen von viereckigen Flächen der quad() Befehl verwendet werden.

Ellipse

b01_ellipse.jpg

Dreieck

b01_triangle.jpg Ein Dreieck, erzeugt mit triangle(), ist eine durch drei miteinander verbundenen Linien geschlossene Fläche. Genau wie bei line() wird die Lage jedes der drei Punkte durch eine x und eine y-Koordinate eindeutig im Sketchfenster bestimmt.

Viereck

b01_quad.jpg Neben rect() erlaubt die erweiterte Möglichkeit quad() ebenfalls das Darstellen von Vierecken. Mittels vier ausformulierten Punkten können Formen gezeichnet werden, die keine Innenwinkel von 90° besitzen und parallele Seitenpaare haben.

Farben verwenden

b01_rgb_system.jpg Standardmäßig arbeitet Processing mit dem RGBA-Farbraum (Rot, Grün, Blau, Alpha). Für jeden der sogenannten Kanäle steht ein Wertebereich von 256 Einheiten, beginnend bei 0, zur Verfügung um das Mischverhältnis zu bestimmen (additive Farbmischung). Ein Anteil von 0 bedeutet, daß kein Teil dieses Kanals in die Farbmischung eingeht – mit 255 der komplette Kanal.
Drei Befehlen bietet Processing um Farben für unterschiedliche Eigenschaften/Bereiche festzulegen: background() für das einfärben der gesamten Zeichenfläche, fill() für die Füllfarbe und stroke() für die Umrandung von visuellen Elemente.

Hintergrund einfärben

Processing färbt ohne unser Zutun den Hintergrund des Sketchfensters grau ein. Wenn wir die Fläche leeren wollten, sie mit einem Farbton füllen, müssten wir ein Rechteck im Fensterformat zeichnen. Diese Funktionalität bietet uns ebenfalls der Befehl background(). Ausgestattet mit Informationen über die Anteiligkeit der Farbkanäle überschreibt er den momentanen Inhalt der Zeichfläche (ohne das wie bei rect() Position oder Größe angegeben werden muss).

Flächen füllen & Ränder einfärben

Um Flächen/Einschlüsse farblich zu füllen kann man dem grafischen Element keine konkreten Informationen mit auf den Weg geben. Innerhalb von Processing existiert für Füll- und Strichfarbe jeweils ein Farbeimer, bildlich gesprochen. Der Inhalt dieser beiden Eimer kann mit zwei Funktionen bestimmt werden: fill() für die Füllfarbe und stroke() für die Farbgebung der Umrandung. Wenn keine Farbe angewendet werden soll kommen noFill() und noStroke() ins Spiel. Diese Einstellungen bleiben solange aktiv, bis sie durch einen Aufruf von fill() bzw. noFill() für die Füllfarbe und stroke() bzw. noStroke() für die Umrandung geändert werden.

Graustufen

b01_grey.jpg Im RGB Farbraum mischen sich Graustufen aus gleichen Anteilen der drei Kanäle Rot, Grün und Blau. Durch die additive Zusammensetzung erhält man bei drei vollen Teilen die Farbe weiß, bei keinen Angaben für R,G,B schwarz. Processing bietet für diesen Fall eine Kurzschreibweise für die Festlegung von Füll- und Strichfarben. Statt drei gleicher Werte wird nur eine Wert zwischen den runden Klammern genannt. Die Zeile fill(38, 38, 38); hat die gleiche Aufgabe wie fill(38);.

background (110);  // grau
fill (0);          // schwarz
stroke (255);      // weiß

Neben dem Grauwert kann als zweiter Wert die Transparenz für den Grauton angageben werden, ebenfalls von 0 bis 255.

background (110);  // grau
fill (0, 90);      // schwarz, transparent
stroke (255, 200); // weiß, transparent

Aufrufe von fill() und stroke() lassen sich wie folgt lesen:

Zeichenreihenfolge