Vvvv-DMXControl (Tutorial für Fortgeschrittene)
aus dem DMXControl-Wiki
Inhaltsverzeichnis |
vvvv und DMXControl (Tutorial für Fortgeschrittene)
Einleitung
Im Tutorial Vvvv-DMXControl (Tutorial) wurden die Grundlagen erklärt, wie man vvvv basierte Grafikanwendungen mittels DMXControl steuert. In diesem darauf aufbauenden Artikel erklärt Markus weitere interessante Techniken bei der Nutzung von vvvv.
Los gehts ...
Das ist eine alte Version meines Lasersimulators. Der Patch dient hier lediglich dazu mal einige Module zu beschreiben und mal einen möglichen Aufbau darzustellen. Bei meinem Patch habe ich versucht, alle zusammengehörigen Module ein bisschen zu gruppieren, damit man nacher auch schnell durchsteigt, warum was wie verknüpft wurde.
Auslesen von DMX-Kanälen
DMX
Als oberstes sieht man das DMX-Modul. Dieses Modul brauchen wir dazu um den Patch über ArtNet mit Werten zu versorgen. Als Ausgang gibt das DMX-Modul eine Art Array zurück. Das Array sieht in etwa so aus:
Kanal Wert 0 0,5680 1 0,1420 2 1,0000 3 0,7980 . . . .
Um nun den Wert eines einzelnen Kanals aus dieser Liste an Werten herauszufischen benötigen wir entweder das Modul GetSpread oder das Modul GetSlice
GetSpread
Mit diesem Modul kann man gleich mehrere Kanäle aus der Liste herausfiltern. Als Eingänge hat GetSpread einmal 'Input' (wird mit dem Ausgang des DMX-Moduls verbunden), dann 'Offset' und zu guter letzt 'Count'. Als Offset wird der Starkanal, ab dem die Kanäle herausgefiltert werden sollen angegeben. Bei Count wird die Anzahl der Kanäle eingetragen. Es lassen sich maximla 4 Kanäle aufeinmal auslesen, aber dazu mehr bei Vector. Der Ausgang muss mit einem Vector-Modul verbunden werden.
Beispiel: Wir wollen die Werte der DMX-Kanäle 2 und 3 auslesen. Dazu geben wir als Offset 1 an. Hier muss man beachten, dass bei VVVV die Nummerirung der DMX-Kanäle schon mit 0 beginnt anstatt mit 1. Um also auf den richtigen Kanal in VVVV zu kommen muss man einfach "DMX-Kanal - 1" rechnen. Bei Count geben wir zwei an, da wir ja 2 Kanäle auslesen wollen.
Vector
Es gibt zwei Versionen des Vector-Moduls einmal 'Join' und einmal 'Split'. Das ganze gibts dann noch mal in 3 Varianten 2D, 3D und 4D. Wenn wir nun am Eingang eines Vector-Split-Moduls den Ausgang von GetSpread angeschlossen haben bekommen wir je nach gewählter Variante 2,3 oder 4 Ausgänge. Dort werden die nun Werte der vorher mit GetSpread herausgefilterten Kanäle ausgegeben.
GetSlice
GetSlice hat zwei Eingänge die uns interessieren. Einmal, wie bei GetSpread, 'Input' dort wird wieder der Ausgang des DMX-Moduls angeschlossen und einmal 'Index' dort geben wir an von welchem Kanal wir den Wert auslesen wollen. Am Ausgang erhält man dann den Wert des Kanals.
Wertbereiche anpassen
Jetzt sind wir schonmal soweit, dass wir in der Lage sind die Werte einzelner Kanäle auszulesen. In VVVV haben die Kanäle einen Bereich von 0.0000 bis 1.0000 anstatt wie bei DMX von 1 bis 255. Bei einigen Modulen kann man sofort mit dem Wertbereich von 0.0000 bis 1.0000 arbeiten. Aber bei einigen Modulen bzw bei einigen Eingängen von Modulen kann es sein, dass wir andere Bereiche benötigen. Zum Beispiel, wenn wir eine Figur auf der X- oder Y-Achse verschieben wollen reicht der bereich von 0 bis 1 nicht aus, da 0 die Mitte ist. Also müssen wir den Bereich anpassen. Dies geht mit Map
Map
Map wandelt einen eingegebenen Wert in einem bestimmten Wertbereich in einen proportionalen Wert in einem anderen Wertebereich um und gibt ihn aus. Den Wertbereich für den Eingang kann man über Source Minimum/Maximum festlegen. Den Bereich für die Ausgabe legen wir über Destination Minimum/Maximum fest.
Beispiel: Wir setzen den Bereich für den Eingabewert auf 0 bis 1 und den Bereich für die Ausgabe von -1 bis 1. Wenn wir nun den Wert 0 an den Eingang legen, kommt am Ausgang -1 raus.
Wie gehts weiter?
Jetzt kann man schonmal die Werte auslesen und soweit umwandeln, dass man damit schon andere Module füttern kann.
Im diesem Artikel werden die hier schon beschriebenen Funktionen auch nochmal mehr oder weniger grob erklärt. Erstes_vvvv_patch_mit_DMX_(Tutorial)
Wenn man dann schon viele, ich nenn es mal Funktionen gebaut hat und man langsam nicht mehr durchsteigt, weil man alles doppelt und dreifach hat, kann man die Funktionen auch in Subpatches auslagern. Das hat den Vorteil, dass das Patch aufgeräumter wird, außerdem kann man den Subpatch in beliebig vielen anderen Patches nutzen, ohne ihn jedes mal kopieren zu müssen.
Subpatches
Subpatches zu erstellen ist relativ einfach. Man muss nur einpaar Kleinigekeiten beachten
- Der Dateiname muss einer kleinen Namenskonvention entsprechen. Am Anfang kann ein beliebiger Name, der die Funktion beschreibt stehen. Dahinter muss in Klammern der Datentyp angegeben werden den die Funktion zurück gibt. Subpatche können auch mehrere Typen zurückgeben, dann trägt man den Haupttyp ein. Als kleines Beispiel: "Quadrat (DX9).i4p"
- Die Datei muss im Ordner 'Modules' im VVVV Ordner abgelegt werden, dies kann entweder direkt dort passieren oder in einem Unterverzeichniss
- Um nun Verknüpfungspunkte zu erstellen, damit man dem Patch auch Werte übergeben kann, erstellt man für jeden Wert bzw. für jeden Parameter eine IOBox. Damit diese als Verknüpfungspunkt erscheint muss man im Feld 'Descriptive Name' einen Namen angeben. Das gleiche muss gemacht werden um Ausgabepunkte zu erzeugen.
Wenn man die obigen 3 Punkte befolgt hat, kann man nun den Patch im Menü für die Module finden.
Weitere Artikel zu vvvv
- Max hat ein weiteres Tutorial erstellt: Erstes vvvv patch mit DMX (Tutorial)
- Zweites vvvv patch für live-Bilder
- Lasersimulator mit vvvv

