Impressum Datenschutzerklärung


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".

Szenenaufbau

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.

XPresso

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.
Radanimation

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

Kommentare:


#1 cob schrieb am 28.03.2010 um 05:02
Sieht gut aus, hab's mal getwittert :)

#2 Herbie schrieb am 26.06.2010 um 18:15
Boahh, wenn Du diese Schaltung und das Skript selbst entwickelt hast, dann mußt Du ein Genie sein. Sowas könnte ich nie. Selbst mit der obigen Erklärung kann ich das nie und nimmer nachvollziehen. Meine Hochachtung. Und toll, daß Du das sogar zum Downloaden anbietest. Da brauche ich gar kein RollIt-Plugin mehr.



Inhalt zur freien Verwendung gibs es beim Thema Downloads.
nach oben springen
mehr auf: Instagram, github, thingiverse