Das Rad - animiert mit XPresso und C.O.F.F.E.E. geschrieben am 29.01.2010
Möchte man ein Gefährt mit Rädern animieren steht man zwangsläufig vor dem Problem:
"Wie animieren?"
Dazu gibt es nun diese Anleitung.
Szenenaufbau
Als Beispiel erstelle ich ein Null-Objekt und nenne es "Rad", dem untergeordnet ein weiteres Null-Objekt "helper" und das eigentliche Rad in Form einer Röhre "RadObjekt".
Ich klicke nun mit der rechten Maustaste auf das "Rad" und wähle im Menü "neue Expression" -> "XPresso Expression" aus.
Mittels doppelklick öffne ich das XPresso-Fenster und ziehe alle Objekte hinein - das "RadObjekt" zweimal zur Ermittelung des Radius.
Die Idee
Für Objekte gibt es die Eigenschaften "Globale Position" und "Vorherige globale Matrix" - diese benutze ich um den zurückgelegten Weg zu ermitteln. Mit dem "helper"-Objekt wird die Richtung ermittelt (vor/zurück).
Die Schaltung
Beim "Rad" aktiviere ich die Ausgänge "Globale Position" und "Vorherige globale Matrix".
Da ich von der "Vorherige globale Matrix" nur die Position benötige, Filtere ich diese mit "Matrix mal Vektor" heraus.
Nun hole ich mir aus dem X_Pool das "C.O.F.F.E.E.", lösche die vorhandenen Eingänge und erzeuge zwei neue vom Typ Vektor. Ebenso wir der Ausgang gelöscht und ein neuer vom Typ Vektor hinzugefügt.
Input1 wird mit Globale Position vom "Rad" verbunden, Input2 mit Vektor von der "Matrix mal Vektor" Schaltung.
Das "C.O.F.F.E.E." erhält folgendes Script:
main()
{
Output1=Input1-Input2;
}
An den Ausgang Output2 schließe ich am Eingang 1 einer "Abstand" Schaltung an. So habe ich die Entfernung vom letzten Punkt zur neuen Radposition ermittelt.
Dieses Ergebnis lasse ich in ein neues "C.O.F.F.E.E." einfließen. Dieses bekommt noch zwei weiteren Eingänge vom Typ Real. Für die Übersicht nenne ich sie inWeg, inhelperZ, inRadRadius und inRadWinkelalt. Den Ausgang nenne ich outRadwinkel.
Mit der "Winkel" Funktion mache ich aus Radians Grad ("RadObjekt" zu "C.O.F.F.E.E.") und umgekehrt (mit Grad rechnet es sich schöner).
Alles zusammen sieht dann so aus:
In das "C.O.F.F.E.E." mit den vielen Eingängen kommt folgendes Script:
main()
{
var pi=3.1415926535897932384626433832795;
//Umfang des Rades errechnen
var umfang=2*inRadRadius*pi;
var vpos=inWeg;
//Wenn Helper hinter dem Rad liegt, entgegengesetzte Richtung
if(inhelperZ<0)vpos=vpos*-1;
//neues Winkel=alter Winkel +zurückgelegte Strecke in Grad umgerechnet
outRadwinkel=inRadWinkelalt+360/umfang*vpos;
//nur 360° drehen lassen
if(outRadwinkel>360) outRadwinkel=outRadwinkel-360;
if(outRadwinkel<-360)outRadwinkel=outRadwinkel+360;
}
Wenn ich nun das "Rad" bewege rollt das "RadObjekt" schön mit.
Das Ganze funktioniert auch wenn das Rad ein Unterobjekt ist und auch in anderen Richtungen.
Und so sieht es an einem Fahrzeug aus:
Download
Und zum Schluss das Projekt als Download:
rad_beispiel.zip 12.84kb Cinema 8.2
#1 cob schrieb am 28.03.2010 um 05:02
Sieht gut aus, hab's mal getwittert :)