|
Grundlagen der Joint Animation Synopsis: BaseGraph unterstützt drei verschiedene Animationsformate, welche auch in Carad geladen oder importiert werden können
Um nun in Carad von Grund auf eine Skin Animation zu erstellen, benötigen wir erst mal ein statisches Objekt, das animiert werden soll. In unserem Fall soll dies ein Rohr sein, das wir direkt als Primitive generieren können:
Nicht vergessen, das Rohr oben und unten zu schließen, damit das fertige Objekt "massiv" aussieht. Folgendes Ergebnis sollten wir bekommen:
Nun wandeln wir das statische Objekt in ein SkinMesh um. Dazu stellen wir sicher, dass das Objekt angewählt ist, klicken mit der rechten Maustaste ins 3D-Fenster und wählen den Punkt "in Skinmesh". Das Ergebnis sieht dann folgendermaßen aus:
Gut zu erkennen ist, dass nun sämtliche Schnittpunkte des Objektes angezeigt werden, was ja auch notwendig ist, um sie im Folgenden den einzelnen Gelenken zuordnen zu können. Nun müssen wir aber erst mal die Gelenke definieren, das geschieht im Animationseditor, der mir einem Klick auf diesen Button geöffnet werden kann:
worauf im Feld Joint und ParentJoint folgendeWerte eingegeben werden:
die Bedeutung ist Folgende: wir definieren 6 Gelenke (der Einfachheit halber 1,2,3,4,5,6 genannt), die aneinander hängen sollen. Dies soll folgendermaßen aussehen, dass Gelenk 6 an Gelenk 5 hängt, 5 an 4 und so weiter. Das erste Gelenk hängt automatisch am Ursprung des Objektes und hat deshalb keinen ParentJoint. An die Gelenke gebundene Objekte brauchen wir in diesem Fall ebenfalls nicht, könnten aber später als "Übung" an den Endjoint 6 eine Kugel hängen. Nachdem die Gelenke definiert wurden, müssen deren lokaler Ursprung gesetzt werden und die Schnittpunkte sollten wir auch zuordnen. Dies sieht folgendermaßen aus, dass wir zuerst das Gelenk wählen (wir fangen mit 1 an), dann die zugehörigen Schnittpunkte per Sweep Selection (Steuerung drücken und Maus bewegen), haben wir die zugehörigen Punkte gewählt, drücken wir "Enter" um die Punkte dem Gelenk zuzuordnen.
Wir stellen sicher, dass das erste Gelenk gewählt ist...
bewegen die Sweep Selection über die entsprechenden Schnittpunkte - Carad erkennt automatisch, dass Schnittpunkte anstelle von Objekten gewählt werden sollen (da eine Skin Animation gewählt ist) und...
die selektierten Schnittpunkte erkennen wir an der anderen Farbe, die sich nach einem Druck auf "Enter"...
intensiviert, wodurch wir erkennen, dass diese dem aktuell gewählten Joint zugeordnet sind. Nun müssen wir im Animationsfenster im Feld "Base Position" noch den Rotationsmittelpunkt des Joints angeben (mittels Rechtsklick auf das entsprechende Textfeld kann dies über das Kontextmenü auch interaktiv geschehen) - oder aber diesen mittels Druck auf die "C"-Taste (für center) auf den Mittelpunkt der dem Joint zugeordneten Schnittpunkte setzen, was in diesem Fall ausreicht. Diese Prozedur wiederholen wir für die Gelenke 2 bis 6, wodurch wir am Ende mit folgendem Bild belohnt werden:
Die Verbindungsstücke zwischen zwei Gelenken werden graphisch dargestellt, wobei ein "Knochen" immer von "schwarz" nach "weiß" geht. Die Gelenke sind nun definiert, für inverse Kinematik würde dies (nach Definition der Fixpunkte für die Endgelenke) bereits ausreichen. Wir wollen aber eine fest vorgegeben Animation haben, bzw. deren zwei, zwischen denen mittels Tastendruck umgeschaltet werden kann. Dies geschieht nun folgendermaßen (den nächsten Abschnitt bitte genau und eventuell mehrmals durchlesen)
Nachdem wir nun wissen, wie eine Animation erstellt wird, brauchen wir für das kleine Demo noch zwei weitere Animationen: Turn2 schaut genau gleich aus wie Turn1, nur dass die Gelenke 2-7 in drei Sekunden von 0;0;0 nach 0;-30;0 rotiert werden (d.h. wir müssen zu den RotationKeys noch jeweils den Key 0;-30;0 hinzufügen und das Feld Frame Rotation schaut dann für die entsprechend Zykel so aus: 0; 0 Default ist eine weitere Animation, die allerdings nur den Ausgangszustand darstellt. Sämgliche Zykel in Default erhalten genau einen RotationsFrame der folgendermaßen definiert ist: 0; 0 Mit <STRG><A> (oder einem Klick auf Am Ende sollte der Animationseditor ungefähr so aussehen:
Soweit, so gut - theoretisch könnten wir das Ganze nun speichern und mit den Animationen herumspielen. Nachdem das Ganze aber ohnehin schon etwas länglich geworden ist, peppe ich das Ganze optisch noch ein wenig auf, sodass die Szene dann so aussieht:
Für das Tutorial ist dies aber unwichtig - wichtig für das weitere Vorgehen, ist es hingegen, die Szene jetzt als Delphi Source mit VCL Unterstützung zu speichern, da ich des Weiteren der Einfachheit halber auf die Steuerelement derselben zurückgreifen werde. Im Hauptformular werden dann vier Buttons hinzugefügt (Turn1, Turn2, Default, Quit - oder auch nur Button1, Button2, Button3, Button4 :^) ), das Create Ereignis ändern wir folgendermaßen, nachdem wir eine globale Variable ActAnimation hinzugefügt haben: // initialize environment and
objects dann ergänzen wir noch die entsprechenden Ereignisbehandlungsroutinen der Buttons, um zwischen den Animationen wechseln zu können: procedure TFormSkinAnim.Button1Click(Sender: TObject); procedure TFormSkinAnim.Button2Click(Sender: TObject); Und haben es geschafft, eine interaktive Animation zu erstellen. Für ein ein komplexeres Projekt, sollte de Wechsel zwischen den Animationen natürlich automatisiert werden, man sieht aber, dass der Aufwand mit Hilfe von BaseGraph gar nicht so aufwändig ist. Ich hoffe, das Prinzip von Skin Animationen (eventuell auch für
eigene Implementierungen), bzw. deren Umsetzung in BaseGraph, ist klar
geworden, das fertige Delphiprojekt steht auch in der Projekte
& Demos Sektion zur Verfügung - bzw. kann hier
direkt heruntergeladen werden.
|