Programmierung von Animationseffekten
5) Tips und Anregungen
Die Möglichkeiten für AnimFX-Objekte sind, da man sie über Skripts programmieren kann, nahezu unbegrenzt. Um dem Entwickler eigener AnimFX-Objekte aber ein paar Anhaltspunkte oder Ideen zu geben, folgt hier eine grobe Einteilung.
a) Tips
Nachfolgend ein paar Anmerkungen zur eigenen Skriptprogrammierung und zur Verwendung bereits existierender Skripts.
a1) Animationszustand errechnen
Im Laufe dieser Anleitung wird von Variablen gesprochen, aus denen man sich den Zustand oder den Zeitpunkt einer Animation errechnen kann. Was soll nun konkret errechnet werden, um keine Variablen unnötig speichern lassen zu müssen, falls eine Animationsberechnung unterbrochen wird? Beim Aufruf gibt monzoom® als Parameter auch Start- und Endzeit der Animation, sowie Zeitpunkt, Bildanzahl und Bildnummer an.
- Berechnen der bisher bearbeiteten Bilder.
Teilt man Bildnummer durch Bildanzahl, multipliziert dies mit 100, erhält man die gewünschte Prozentzahl. Ohne Multiplikation kann man den Faktor (0..1) weiterverwenden, um einen Zustand zwischen zwei Werten zu kalkulieren.
- Berechnen der bisher vergangenen Zeit.
Subtrahiert man vom aktuellem Zeitpunkt die Startzeit, kann man dieses Ergebnis zusammen mit dem aus der Subtraktion der Startzeit von der Endzeit zur weiteren Abschätzung verwenden.
- Berechnen der Bilddauer.
Teilt man nun die Animationsdauer durch die Bildanzahl, erhält man damit die Zeit pro Bild.
a2) Editieren vorhandener Skripts
Oft lassen sich Effekte durch einfache Überarbeitung den einfachen Wünschen anpassen oder so weiterbearbeiten, daß durch wenig Arbeit ein neuer Effekt entsteht.
a2.1) Wertebereiche erweitern
Dies ist das vielleicht heikelste, aber am häufigsten gewünschte Thema. Das Problem, vor dem man steht:
Ein Schieber soll einen höheren Wert annehmen, als man einstellen kann. Dies ist jedoch nicht möglich. Was ist nun, wenn bei dem AnimFX GeoEdit eine Drehung von 615 Grad eingestellt werden soll (360 Grad sind möglich), oder der Explode-Effekt um ein Vielfaches von Einheiten die Dreiecksflächen auseinanderwirbeln soll?
Beispiel Explode-Skript:
AFX_DEFINE_OBJ_VAR ich 0 1 Bewegung 1 100
Diese Zeile, die das Aussehen des Parametereditors des AnimFXs mitbestimmt, begrenzt die maximale Ausdehnung der wegfliegenden Dreiecke auf 100 Einheiten. Theoretisch kann man z.B. auch einen Wert von 20000 eingeben.
Aber Vorsicht!
Eine solche Änderung ist schnell gemacht, und führt häufig zu den gewünschten Ergebnissen. Es sollte aber dennoch unbedingt beachtet werden, daß der Programmierer eines AnimFXs das Skript möglicherweise nur auf die vorgeschlagenen Werte abgestimmt hat. Dann kann alles andere als das Gewünschte passieren!
Auch kann eine Eingabe per Tastatur gemacht werden. Es hängt dann vom Programmierer des Skripts ab, ob er den Wert abfragt und evtl. automatisch begrenzt. In letzterem Fall hätte auch eine Änderung des Wertebereichs des Schiebers keine Auswirkung.
a2.2) Wiederverwertung
Dieses Stichwort begegnet dem Skriptprogrammierer meist auch bei normalen Skripts. Es ist eine große Arbeitsersparnis, ein bestehendes Skript zu verwenden, das grundsätzlich bereits den Arbeitsvorgang beinhaltet, welchen man mit einem neuen Skript ebenfalls durchführen möchte. Dadurch läßt sich in den ersten Schritten Fragen an den Benutzer, Variablendefinitionen, Sicherheitsabfragen usw. durch Umbenennen oder direktes Weiterverwenden viel Arbeit sparen. Außerdem verringert dies die Gefahr von Fehlern beim Erstellen von Skripten.
b) Anregungen: AnimFX-Objekte, die andere Objekte manipulieren
Hierbei werden keine neuen Objekte erzeugt, sondern nur vorhandene Objekte manipuliert.
Im INIT-Aufruf wird abgefragt, welche Objekte manipuliert werden. Bestimmte Parameter der Manipulation lassen sich in der Regel in Objektvariablen speichern (damit sie animierbar sind).
Beispiele:
b1) Rüttel-Effekt
Ein Geo-Objekt wird mit variabler Ausdehnung gerüttelt, d.h. per Zufall ein bißchen in jede Richtung bewegt. Per Snaps und Sequenz wäre das viel mühseliger. (siehe Rüttel.afx)
b2) Flügelschlag-Effekt
Man lasse zwei Geo-Objekte, die die Flügel eines Vogels oder einer Insekts darstellen, z.B. über eine Sinus-Funktion auf und abschlagen. Auch hier könnten wir den gleichen Effekt nachbilden, indem man den Flügeln zwei Sequenzen zuordnet, jeweils einen Snap für die Auf- und Ab-Position erzeugt und den Sequenz die "Zyklisch"-Eigenschaft gibt.
Aber mit einem AnimFX-Objekt geht es viel einfacher und ist dann auch flexibler. Wir können nämlich die Frequenz und die Amplitude des Schwingens als Objekt-Variablen definieren, also animierbar machen. So kann man einfach per weniger Snaps den Vogel mal wild flattern und mal entspannt segeln lassen. (Siehe Flügel.afx)
b3) Materialfarbe abhängig von Geo-Objekt-Eigenschaften machen
Man könnte die Farbe eines Materials durch die Position eines Geo-Objektes setzen lassen. Die X-Koordinate sei der Rot-Anteil der Farbe zugeordnet, die Y-Koordinate dem Grün-Anteil und die Z-Koordinate dem Blau-Anteil.
Das AnimFX-Skript erfragt vor jeder Bildberechnung die Position des Geo-Objektes, rechnet diese in geeigneter Weise in Farbwerte von 0 bis 255 um, und setzt entsprechend die Farbe eines Materials. Wird das Geo-Objekt dann per Sequenz bewegt, so werden alle Geo-Objekte, die das betreffende Material besitzen, ein wildes Farbspiel zeigen.
Ebenso könnte man dadurch das Zusammenspiel der drei Farbwerte Rot, Grün und Blau innerhalb eines Quadervolumens illustrieren: z.B. unten links sind alle Farben auf Null, also Farbe Schwarz, auf der Gegenüberliegenden des Würfels sind die drei Farbwerte maximal hell. Bewegt man nun das Objekt innerhalb des Quaders, nimmt das Objekt entsprechend der Farbanteile die richtige Farbmischung an. Dies dürfte die erste, echt dreidimensionale Farbtafel sein...
© 1997 Oberland Computer