3D-Animationen mit Pure Data

Mit Pure Data kann man nicht nur Sounds generieren, so wie in der Make-Ausgabe 2/16 gezeigt, sondern es lassen sich damit auch eigene interaktive 3D-Animationen oder sogar Spiele programmieren.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 5 Min.
Von
  • Felix Pfeifer
Inhaltsverzeichnis

In der Programmiersprache Pure Data drückt man sich weniger in Worten aus als in gezogenen Verbindungen einzelner Objekte mit Hilfe virtueller Strippen. Eigentlich wurde Pure Data entwickelt, um darin Audio-Programme zu erstellen. Das Programmieren ist vergleichbar mit der Bedienung eines modularen Analogsynthesizers, bei dem man die einzelnen Oszillatoren und Filter durch Kabelverbindungen miteinander verschaltet und so Klänge gestaltet.

Die Erweiterung GEM (Graphics Environment for Multimedia) für Pure Data erlaubt es interaktive 3D-Animationen zu erstellen. Wer die Grundlagen von Pure Data beherrscht (siehe dazu auch unseren Pure-Data-Crashkurs in Make 2/16, S. 96) findet hier eine kurze Anleitung anhand dreier Beispiel-Patches zum Thema GEM.

Erstes einfacher Patch für die Darstellung eines Würfels

Gerendertes Ergebnis
  1. [gemwin] wird benötigt, um ein Fenster für die 3D-Darstellung zu erzeugen.
  2. Sendet man die Message "create" an das [gemwin] Objekt, so wird das Fenster für die 3D-Darstellung erzeugt. Dazu klickt man im Bedienmodus auf [create(.
  3. Mit [1 ( wird das Rendering gestartet, die Berechnung der 3D-Animation.
  4. [lighting 1( aktiviert die Beleuchtung. Die Darstellung funktioniert auch ohne Beleuchtung, aber dann sieht man keine Schatten.
  5. Mit [0 ( kann man die Berechnung der 3D-Animation anhalten.
  6. [destroy( schließt das Gem-Fenster.
  7. Dieser Mehrfachschalter nennt sich Hradio (zu finden im Put-Menü). Die Anzahl der Schaltflächen kann im Properties-Menü (rechte Maustaste über dem Hradio gedrückt halten) eingestellt werden. Das Einstellungsfeld dazu heißt Number.
  8. Diese Message-Box gibt an seinem Outlet "stereo" aus, gefolgt von dem Wert, der am Eingang anliegt. Dies wird durch das $1 in der Message-Box erreicht. Hier ist das der Wert aus dem Hradio, welches je nach Schaltstellung 0, 1 oder 2 ausgibt.
  9. Um ein 3D-Objekt im Gem-Fenster darzustellen zu können, braucht man ein [gemhead] Objekt.
  10. Mit [lighting 1( wurde zwar eingestellt, dass Beleuchtungseffekte berechnet werden, aber dem Patch fehlt noch eine Lichtquelle.
  11. Ein zweiter [gemhead] ist notwendig, um nun auch ein Objekt darzustellen – in diesem Fall einen Würfel: [cube]. Andere mögliche 3D-Objekte, die in Gem schon vorhanden sind: [sphere], [cone], [tube], [teapot], [torus] oder [cuboid].

Sollte der Patch als Text im Browser angezeigt statt heruntergeladen werden, klicken Sie rechts und "Speichern unter ...".

Mit ein paar Erweiterungen kann man den Würfel drehen.

Gerendertes Ergebnis
  1. Mit [translateXYZ] kann man ein 3D-Objekt zur Seite, nach oben beziehungsweise unten und nach vorn beziehungsweise hinten (auf der X-, Y- und Z-Achse) verschieben.
  2. Beim Verschieben sollte man möglichst kleine Werte wählen, also die Shift-Taste gedrückt halten, solange man die Zahl per Maus ändert. Ansonsten kann es sehr schnell passieren, dass der Würfel außerhalb des angezeigten Bildausschnittes landet.
  3. Mit [rotateXYZ] kann man ein 3D-Objekt beliebig drehen. Die Angabe des Winkels erfolgt in Grad.

Animations-Patch. Die Vergrößerung öffnet eine etwas übersichtlichere Version.

Gerendertes Ergebnis
  1. Anstatt mehrere Message-Boxen anzulegen, werden mehrere Messages durch Komma getrennt in eine Message-Box eingetragen.
  2. Ein schnelles Metronom. Mit den Messages [1 ( und [0 ( kann das Metronom gestartet und gestoppt werden. Damit die Animation läuft, muss man das Metronom starten, es dient als dessen Taktgeber.
  3. Diese Konstruktion ist ein Zähler. [f ] speichert eine beliebige Zahl. Bei der Erzeugung des Objekts ist das erstmal die 0. Erreicht ein Bang das Hot Inlet von [f ], gibt [f ] seinen Inhalt aus. Mit [+ 1] wird 1 addiert und das Ergebnis gelangt wieder in [f ] – diesmal jedoch in das Cold Inlet, sodass der neue Wert zwar gespeichert, aber nicht ausgegeben wird. Der Zähler zählt somit unendlich weiter, bis er gestoppt wird.
  4. Der Wert des Zählers wird so multipliziert, dass zwischen den ganzen Zahlen auch Kommazahlen vorkommen.
  5. Die Sinusfunktion erzeugt aus den immer größer werdenden Zahlen Werte, die zwischen -1 und +1 hin- und herschwingen.
  6. Die Werte schwingen nun zwischen -8 und +8.
  7. Die Werte schwingen nun zwischen -16 und 0.
  8. Multipliziert man den Ausgang von [sin] mit 180, so erhählt man Werte zwischen -180 und 180. Damit lässt sich sehr gut eine Rotation beschreiben.
  9. Mit [pix_image] kann man Bilder in Pd/Gem laden.
  10. Das ist ein grafischer Bang, den man über das Put-Menü platzieren kann, und der bei Klick darauf wie ein Taster wirkt.
  11. Empfängt [openpanel] einen Bang, dann öffnet sich ein Fenster mit einem Dateiauswahldialog. Hier sucht man sich am besten eine JPG-Datei aus. Hat man mit "Öffnen" oder "Open" bestätigt, gibt [openpanel] ein Symbol mit dem Dateinamen und dem gesamten Pfad aus.
  12. Die Message-Box hängt den Dateinamen samt Pfad an den Befehl "open" an und gibt die Nachricht an [pix_image] weiter.
  13. [pix_texture] projiziert ein Bild auf ein Objekt.

(fpf)