Entwicklung eines interaktiven Animations

Transcrição

Entwicklung eines interaktiven Animations
Entwicklung eines interaktiven
Animations-Systems
Studienarbeit
Vorgelegt von
Stefan Bröhl
Institut für Computervisualistik
Arbeitsgruppe Computergraphik
Betreuer:
Prüfer:
Prof. Dr.-Ing. Stefan Müller
Prof. Dr.-Ing. Stefan Müller
Januar 2006
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation und Zielsetzung . . . . . . . . . . . . . . . . . . . . .
1.2 Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Grundlagen
2.1 Interpolation . . . . . . . . . . . .
2.1.1 Lineare Interpolation . . .
2.1.2 Höhergradige Polynome .
2.1.3 Stückweise Interpolation .
2.2 Spline Kurven . . . . . . . . . . .
2.2.1 Cubic Bezier Spline . . .
2.2.2 Cubic Hermite Spline . . .
2.2.3 Spannung und Kontinuität
2.3 Animation . . . . . . . . . . . . .
2.3.1 Verfahren . . . . . . . . .
2.3.2 Beispielsysteme . . . . .
1
2
3
.
.
.
.
.
.
.
.
.
.
.
4
4
4
5
5
7
7
8
10
12
12
13
3 Interaktives Animations-System
3.1 Konzeption . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Layout und Interaktion . . . . . . . . . . . . . . . . . . . . . . .
15
15
18
4 Implementation
4.1 Programmiersprachen und Tools . . . . . . . . . . . . . . . . . .
4.2 Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
20
5 Zusammenfassung und Ausblick
23
Literaturverzeichnis
27
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1 Einleitung
Jeden Tag bewegen wir verschiedene Dinge unzählige Male von einem Ort zum anderen: Ob wir uns dabei selber fortbewegen oder etwas versenden spielt dabei keine Rolle. Eine Verbindung zwischen Start und Zielort muss existieren. Je nachdem
welche Strecke es zurückzulegen gilt, kommen verschiedene Transportmittel wie
zum Beispiel die eigenen Beine, das Auto oder das Flugzeug in Frage. Eine weitere
wichtige Rolle spielt die Streckenführung, die bei Autobahnen ja eher geradlinig
verläuft und auf Landstraßen eher durch Kurven geprägt ist. Die Charakteristik des
Weges hat damit also einen erheblichen Einfluss auf die Reise- bzw. Transportgeschwindigkeit. Neben den entstehenden Transportkosten unterscheiden sich die
Transport- und Fortbewegungsmittel meist in Geschwindigkeit, Beschleunigung,
Volumen, Gewicht etc. Diese physikalischen Größen sind durch die Natur gegeben
und müssen nicht wie am Computer teils sehr aufwendig simuliert werden.
Übertragen auf die Informatik existieren auch hier zahlreiche Verbindungen gerade wenn es um den Austausch von Informationen geht. Mittlerweile muss dieser ja nicht unbedingt über eine physikalische Verbindung (Datenleitung) stattfinden, sondern funktioniert auch durch virtuelle Verbindungen (Funkstrecken). Ein
Hauptfaktor bei der Informationsübertragung ist die Geschwindigkeit und nicht zu
vergessen die Kapazität der Verbindung.
In der Computergraphik wächst der Anspruch immer realistischere Darstellungen
und Animationen von natürlichen Bewegungen zu erstellen. Die Computerspiele von heute glänzen vor allem durch realistische Gesichtsanimation und riesige
3D-Welten, in denen sich eine Vielzahl von Objekten automatisch oder aber benutzergesteuert bewegen. Veränderungen zum Beispiel von Position und Orientierung
der Objekte müssen inzwischen nicht mehr alle von Hand erstellt werden, sondern
können vom Computer berechnet werden. Durch diese Technik, der Berechnung
von Zwischenpositionen genannt Keyframing, ist es überhaupt möglich geworden
das Kinofilme wie Shrek von Dreamworks oder andere Animationsfilme nach wenigen Jahren auf der Leinwand erscheinen. Natürlich spielt bei der Entwicklung
solcher Filme auch die zur Verfügung stehende Software eine wichtige Rolle.
In dieser Arbeit soll es genau darum gehen, eine Beispielanwendung zu entwickeln die auch bei der Entwicklung solcher Animationsfilme eingesetzt werden
kann. Die Anwendung gibt dem Benutzer die Möglichkeit ein Objekt entlang einer
vordefinierten Strecke zu bewegen und interaktiv zu verändern. Interaktiv deshalb,
da der Benutzer vielfältige Möglichkeiten hat, in den Ablauf der Animation und
Streckenführung einzugreifen. Einerseits geht es also um die Erstellung und Modifizierung von benutzerdefinierten Pfaden und andererseits um die damit verbundene Animation.
1
1.1
Motivation und Zielsetzung
Meine Aufmerksamkeit für die Animationsthematik wurde vor allem durch die
Vorlesung Animation und Simulation“ geweckt. Animationen werden sowohl in
”
Computerspielen als auch in vielen aktuellen Filmen erfolgreich eingesetzt.Ob es
nun um die Haaranimation von Dreamworks Shrek geht, oder aber um die Gesichtsanimationen von Pixars Monsters.Dies sind nur einige wenige Bereiche mit
denen sich die Computeranimation beschäftigt. Es gilt nun möglichst einfache Programme zu entwickeln, die den Anwender bei dieser Erstellung unterst ützen und
Bewegungen möglichst realistisch wirken lassen. In den kommenden Jahren wird
sich zeigen, ob diese Art von Animation allgemein akzeptiert wird, wonach es bisher aussieht.
Gerade im Fachgebiet der Computervisualistik geht es nicht nur um die formal korrekte Erstellung eines Systems sondern auch um die Untersuchung der Handhabbarkeit unter softwareergonomischen Gesichtspunkten. Eine einfache sowie übersichtliche Bedienung trotz zahlreicher Funktionen ist ein wichtiges Merkmal moderner Anwendungen.
Die Anforderungen die ich mir selbst an ein solches System gestellt habe, sind
nun folgende:
Ein beliebiges Objekt soll zunächst entlang eines benutzerdefinierten Pfades animiert werden. Dabei entstehen einige Probleme: Wie setzt man die Orientierung
des Objektes, welche Pfadinterpolation ist für welches Problem die Beste und wo
gibt es kritische Stellen bei der Berechnung? Diese Probleme werden uns später
noch beschäftigen.
Ungeachtet der Probleme, die bei der Umsetzung des Anforderungskataloges entstehen könnten, geht es weiter um die Formulierung von Zielen:
Bei der Entwicklung des Animationssystems ist auf jeden Fall darauf zu achten,
dass sich das Objekt möglichst realistisch fortbewegt. Die Blickrichtung sollte entlang des Pfades zeigen und das Hineinlegen in eine Kurve ebenso wie Steigung und
Gefälle realistisch simuliert werden. Das System ist dem Benutzer graphisch ansprechend zu präsentieren und eine Interaktion durch Hilfen und Rückmeldungen
zu erleichtern. Es sollte darauf geachtet werden, die grundlegenden Konzepte der
Softwareergonomie zu erfüllen; die Erwartungskonformität ist dabei zu erhalten.
Technische Anforderungen, die es umzusetzen gilt, sind hingegen Punkte wie das
Laden und Speichern von Szenendateien sowie der Aufbau eines konsistenten und
erweiterbaren Frameworks. Allgemein sollte die Klassenarchitektur eine wichtige
Rolle bei der Entwicklung spielen insofern, dass sie zur Übersichtlichkeit und somit zur klaren Trennung der Kernbereiche in Interaktion, Animation und System
beiträgt. Es folgt nun eine Übersicht über die weiteren Kapitel dieser Arbeit.
2
1.2
Kapitelübersicht
2. Grundlagen
Im Anschluss an diese Einleitung werden die mathematischen Grundlagen dargelegt. Es wird um die Frage gehen, welche Verfahren es jeweils in den Bereichen
Interpolation und Animation gibt und wie diese beispielhaft angewendet werden.
Dabei wird eine Beurteilung stattfinden, inwieweit sich die Verfahren f ür die geplante Anwendung umsetzen lassen und wie sinnvoll deren Einsatz überhaupt ist.
Der Schwerpunkt wird jedoch auf der Übertragung von mathematischen Modellen
der Interpolation auf dem Gebiet der Computeranimation liegen.
3. Interaktives Animationssystem
In diesem Teil geht es um das eigentliche Animationssystem, wobei sowohl die
Konzeption als auch die Gestaltung der Benutzungsoberfläche und deren ergonomische Beurteilung abdeckt werden.
4. Implementation
Im diesem Kapitel, welches den Hauptteil der Arbeit wiedergibt, werden zuallererst die verwendeten Programmiersprachen und Tools vorgestellt. Dabei werden
jeweils wichtige Kernfunktionen, die für den Ablauf des Programms Sorge tragen,
aufgezeigt und näher beschrieben. Diese Kernfunktionen bilden das Framework,
auf welches alle anderen Teile des Animationssystems aufbauen.
5. Zusammenfassung und Ausblick
Im abschließenden Teil geht es rückblickend um die Ergebnisse dieser Arbeit. Es
wird ergänzend dazu den Fragen nachgegangen, ob und wie die zu Anfang gestellten Probleme gelöst wurden sowie auf Probleme bei der Implementierung und die
Vermeidung von Fehlern eingegangen. Zuletzt werden noch einige zuk ünftige Erweiterungen des Animationssystems aufgezeigt und ein Ausblick auf die weitere
Verwendung des entwickelten Frameworks gegeben.
3
2 Grundlagen
In diesem Kapitel werden wir uns mit den mathematischen Hintergr ünden beschäftigen, die sowohl für das Verständnis als auch für die spätere Implementation notwendig sind. Um Pfade überhaupt erst mathematisch beschreiben zu können, ist
es wichtig das Thema der Interpolation hier genauer zu betrachten. Des Weiteren
sind einige Kurvenarten genannt und beschrieben, die sich besonders gut f ür die
spätere Implementation eignen. Im Anschluss daran ist der Begriff der Animation näher erläutert und auf aktuelle Anwendungsgebiete sowie derzeit verwendete
Verfahren eingegangen. Am Ende des Kapitels werden abschließend zwei bekannte Animations-Systeme vorgestellt und gezeigt, mit welchen Schritten damit eine
recht einfache Pfadanimation erstellt werden kann.
2.1
Interpolation
In der numerischen Mathematik bezeichnet der Begriff Interpolation eine Klasse von Problemen und Verfahren, wobei zu diskreten Daten eine kontinuierliche
Funktion gesucht wird, die diese abbildet. Findet man eine solche Funktion so
spricht man auch vom Interpolieren der Daten. Dabei werden lineare wie auch polynomielle Probleme abgedeckt.
2.1.1 Lineare Interpolation
Eine der bekanntesten Operationen in der Computergraphik ist die lineare Interpolation. Durch diese ist es zum Beispiel möglich, einen Punkt auf der Strecke AB zu
bewegen, wie in Abb.1 zu sehen ist. In Gleichung (1) ist dies durch Veränderung
von Parameter u möglich. Bei u = 0 ist die aktuelle Position der Punkt A und bei
u = 1 die Position von B (mehr siehe [Shirley, 2002, S.42]).
p(u) = (1 − u) ∗ A + u ∗ B
(1)
Hierbei handelt es sich um lineare Interpolation, da die gewichteten Terme 1 − t
lineare Polynome von t sind.
u = 0.5
B
u = 0.1
A
Abbildung 1: Interpolation der Position in Abhängigkeit von Parameter u.
4
2.1.2
Höhergradige Polynome
Die Interpolation von Kurven kann auch durch die Verwendung des fundamentalen
Satzes der Algebra geschehen; dieser besagt, dass sich zu n+1 Datenpunkten genau
ein Interpolationspolynom n-ten Grades finden lässt. Durch Lösung eines linearen
Gleichungssystems lassen sich somit die erforderlichen Koeffizienten bestimmen.
Abbildung 2: Interpolationspolynom n-ten Grades.
Man erhält zu n+1 Punkten genau ein Interpolationspolynom n-ten Grades (siehe
Abb.2. Um dieses zu berechnen ist die Lösung eines linearen Gleichungssystem
notwendig. Mit Hilfe des Lagrange-Schemas (siehe Gleichung 2) lässt es sich jedoch vermeiden [Bender und Brill, 2003, S.133 ].
m
m
i=0
j=0
p(u) = ∑ fi ∗ ∏
j6=i
x−xj
xi − x j
(2)
Da die Berechnung der Lagrange-Polynome recht umständlich ist und das Hinzufügen eines neuen Kontrollpunktes zu einer Neuberechnung f ührt, ist diese Art
der Interpolation nicht gerade ideal. Zudem treten meist bei hohen Polynomgraden starke Schwingungen, gerade an den Rändern, des Interpolationsbereiches auf.
Diese Schwingungen bezeichnet man auch als Runge-Effekt der Interpolationspolynome [Bender und Brill, 2003, S.135]. Unter [Müller, 1996/97] findet sich ein interaktives Applet, mit dem die Lagrange Interpolation visualisiert ist und die eben
erwähnten Nebeneffekte beobachten kann.
2.1.3
Stückweise Interpolation
Polynome neigen mit zunehmendem Grad zur Instabilität und sind sehr rechenintensiv. Polynome mit Grad > 5 werden deshalb vom praktischen Einsatz nach
Möglichkeit ausgeschlossen; stattdessen wird in solchen Fällen die stückweise Interpolation der Datenmenge eingesetzt. Berücksichtigt man diesen Sachverhalt, so
zeigt sich eine Qualitätssteigerung der Interpolationskurve nicht zwingend mit der
5
Steigerung der Interpolationspunkte. So ist eine Kurve, welche durch stückweise
”
lineare Interpolation“ angenähert wird, nicht besser dargestellt, je größer die Zahl
ihrer Unterteilungen ist. Zweit- oder drittgradige Polynome nennt man üblicherweise
Spline-Interpolationen. Die Frage nach der Stetigkeit und Differenzierbarkeit an
den Stützstellen von abschnittsweise definierten Interpolanten ist hierbei von großer
Bedeutung. Eine Interpolationsfunktion, also eine abschnittsweise definierte Funktion, setzt sich aus einer gewissen Anzahl von Teilintervallen zusammen. F ür jedes einzelne Teilintervall wird eine Polynom-Interpolation niedrigen Grades konstruiert. Wegen der Arbeitsschritte die dafür notwendig sind, spricht man hier von
stückweiser Polynom-Interpolation bzw. Spline-Interpolation. Wie auch schon bei
der Lagrange-Interpolation gezeigt, stellt auch hier die st ückweise lineare Interpolation die einfachste Methode zur Dartellung der Kurve dar. Es werden dazu alle
n Punkte durch Geraden miteinander verbunden. Da f ür eine plausible Darstellung
aber auch immer eine akzeptable Näherung der Kurve erreicht werden muss, ist es
notwendig, eine sehr hohe Anzahl von Stützstellen zu verwenden. Einzelne Splines bilden an ihren Übergängen zur jeweils nächsten Spline keinen glatten Verlauf.
Dies ist ein großer Nachteil, da somit die Gesamtkurve keinen durchgehenden Verlauf, sondern mehrere Brüche in Form von Ausbeulungen“ haben kann. Dies hat
”
zur Folge, dass die Gesamtfunktion nicht an allen Stellen differenzierbar ist. Abbildung 3 zeigt ein Beispiel für eine mögliche Pfaddarstellung mittels stückweiser
linearer Interpolation.
Abbildung 3: Stückweise lineare Interpolation.
6
2.2
Spline Kurven
Splines stehen für eine mathematische Repräsentation einer Kurve, die durch eine Folge von Punkten in Intervallen entlang der Kurve festgelegt sind. Außerdem
kann eine Funktion definiert werden, die einen weiteren Punkt innerhalb eines Intervalls berechnet. Es gibt sehr unterschiedliche Arten von Funktionen, die eine
Kurve interpolieren oder approximieren. Im Folgenden wird auf kubische Bezier
Splines, kubische Hermite Splines und Catmull-Rom Splines näher eingegangen.
2.2.1
Cubic Bezier Spline
Spline Kurven gehören zu einer Gruppe von Funktionen dritten Grades, die mit
Hilfe von n Kontrollpunkten glatte bzw. weiche Kurven erstellen. Jede Bezier Kurve besteht demnach aus einer Reihe von Kontrollpunkten p i . Der Grad der Bezier
Kurve ist genau um eins kleiner, als die Anzahl der Kontrollpunkte. Demnach ist
es uneffizient, einen Pfad mithilfe von Bezier Kurven zu erzeugen, die aus vielen Kontrollpunkten in einem Kurvensegment bestehen. Dies lässt sich durch die
Auftrennung in kleinere Kurvensegmente vermeiden. Die Kurve verläuft immer
innerhalb der konvexen Hülle, wie in Abbildung 4 zu sehen ist, und durch Startund Endpunkt. Somit geht diese durch den Startpunkt P0 und den Endpunkt P3 ,
damit werden also Start- und Endpunkt bei Bezier Splines interpoliert. Die dazwischenliegenden Kontrollpunkte P1 und P2 werden hierbei jedoch approximiert, das
bedeutet die Kurve nähert sich diesen nur an und geht nicht durch diese hindurch.
P1
P3
P2
P0
Abbildung 4: Die konvexe Hülle der Bezier Kurve.
Mithilfe des De Casteljau Algorithmus, der bei der Implementation von Bezier
Kurven eine große Rolle spielt, ist es möglich, nicht nur die Position eines Kurvenpunktes zu bestimmen, sondern auch die dazugeh örige Tangentensteigung. Abbildung 5 versucht dies zu veranschaulichen. Mehr zum Algorithmus und einer
umfassenderen Beschreibung siehe hier [Bender und Brill, 2003, S.113].
7
P1
B
P2
A
P0
Abbildung 5: Berechnung von Position und Tangentensteigung mittels De Casteljau.
2.2.2 Cubic Hermite Spline
Im Vergleich zur Bezier Kurve, bietet die Hermite Kurve den Vorteil, dass jeder
Kontrollpunkt interpoliert wird. Die Kurve verläuft also durch alle Kontrollpunkte. Hierbei ist jedoch nicht mehr sichergestellt, dass diese innerhalb der konvexen
Hülle liegen (siehe Abb.6).
P1
P3
P2
P0
Abbildung 6: Verlauf der Hermit Kurve
Eine Hermite Kurve ist definiert durch zwei Punkte P0 , P1 sowie zwei Tangentenvektoren d0 , d1 . Zur Berechnung der Kurve werden meist Hermite-Basisfunktionen
verwendet, die wie folgt aufgestellt werden:
a0 (u) = 2 ∗ u3 − 3 ∗ u2 + 1
a1 (u) = −2 ∗ u3 + 3 ∗ u2
b0 (u) = u3 − 2 ∗ u2 + u
b1 (u) = u3 − u2
8
(3)
In der nachfolgenden Abbildung 7 sind diese Basisfunktionen zur Veranschaulichung und zum besseren Verständnis abgebildet:
Hermite BasisFunktionen
1
a0(x)
a1(x)
b0(x)
b1(x)
0.8
0.6
0.4
0.2
0
-0.2
0
0.2
0.4
0.6
0.8
1
Abbildung 7: Visualisierung der Hermite-Basisfunktionen.
Die Kurve ist eine Linearkombination der Punkte und Tangenten und kann mit Hilfe der in Gleichung 3 aufgestellten Basisfunktionen a0 (u), a1 (u), b0 (u) und b1 (u)
durch folgende Gleichung aufgestellt werden:
C(u) = a0 (u) ∗ P0 + a1 (u) ∗ P1 + b0 (u) ∗ d0 + b1 (u) ∗ d1
(4)
Um die Tangentensteigung an dem gegebenen Punkt zu bestimmen, ist lediglich
die Ableitung der Funktion C(u) notwendig:
C0 (u) = (6u2 −6u)∗P0 +(−6u2 +6u)∗P1 +(3u2 −4u+1)∗d0 +(3u2 −2u)∗d1
(5)
Wie in Abbildung 6 zu sehen ist, ist Punkt P1 und zugehörige Tangente im ersten
Kurvensegment gleich dessen Entpunkt und zugleich Startpunkt des darauffolgenden Segmentes. Ein Problem besteht jedoch darin, dass sowohl die Kontrollpunkte
als auch die Tangenten angegeben werden müssen. Da diese Angaben nicht immer bekannt sind, kann man eine leicht veränderte Variante genannt Catmull-Rom
Splines nutzen. Hierbei werden die Tangenten automatisch aus den beiden Nachbarpunkten bestimmt. Bei den Endpunkten der Kurve muss dies jedoch gesondert
behandelt werden, es sei denn, die Kurve ist geschlossen und der Startpunkt ist
auch gleichzeitig der Endpunkt.
9
2.2.3 Spannung und Kontinuität
Da es oft wünschenswert ist, eine bessere Kontrolle über den Verlauf der Kurve zu
haben, ist es notwendig, die Standardinterpolation zu überdenken. Durch Parametrisierung der Tangentenvektoren einer interpolierenden Kurve ist es m öglich, diese in eine eintreffende sowie ausgehende Tangente zu unterteilen. Durch diese sind
Eigenschaften der Kurve wie zum Beispiel Spannung, Kontinuität und Schräglage
beeinflussbar. Sieht man diese beiden Teile als rechten und linken an, so kann man
sie als TiL und TiR einer Tangente Pi bezeichnen. Die Spannung gibt nun den Grad
der Biegung der Kurve am Punkt Pi an, was durch eine Skalierung der beiden Einzeltangenten am Kontrollpunkt ermöglicht wird (siehe Gleichung 6 von [Parent,
2002, S.465 ]).
TiL = TiR = (1 − t) ∗
1
∗ ((Pi+1 − Pi ) + (Pi − Pi−1 ))
2
(6)
Im Normalfall ist t = 0 und der Tangentenvektor ist der Durchschnitt der beiden
gegenüberliegenden Seiten. Geht der Spannungsparameter t gegen eins, dann verkleinern sich die Tangenten bis sie schließlich Null werden. K ürzere Tangenten an
den Kontrollpunkten sind ein Indiz dafür, dass die Kurve sich einer geraden Linie,
in Nähe des Kontrollpunktes, immer mehr annähert (Abb.8).
Abbildung 8: Änderung des Spannungsparameters t.
10
Der Kontinuitätsparameter c ist dazu gedacht, die Art und Weise zu beeinflussen in
der sich zwei Kurvensegmente an einem Kontrollpunkt treffen. Die hereingehende
linke und herausgehende rechte Tangente sind dabei symmetrisch zueinander definiert, sodass bei normaler Spannung die gegenüberliegenden Tangenten angenähert
werden (siehe Gleichung 7).
1−c
1+c
(Pi − Pi−1 ) +
(Pi+1 − Pi )
2
2
1−c
1+c
(Pi − Pi−1 ) +
(Pi+1 − Pi )
TiR =
2
2
TiL =
(7)
(8)
Der Standardwert für die Kontinuität ist c = 0. Dabei werden gleiche Tangentenvektoren sowohl links als auch rechts vom Kontrollpunkt erzeugt. Hierdurch ist nun
sichergestellt, dass an der Verbindung eine Stetigkeit existiert (mehr siehe [Parent,
2002, S.465 ]).
11
2.3
Animation
Die Animation von lat. animare, zum Leben erwecken“ findet den Ursprung An”
fang der 90er Jahre, insbesondere beim Film. Zu einem der ersten Animationsfilmemachern zählt Emile Cohl (1857-1938), ein Franzose der 1908 seinen ersten
Animationsfilm Fantasmagorie“ fertig stellte (IMDB1 : The first all-animated film
”
in history, a series of scenes without much narrative structure, but morphing into
each other.) Animation ist demnach ein Verfahren, wodurch unbelebten Objekten
im Trickfilm Leben eingehaucht wird. In diesem Zuge spricht man auch von der
Erzeugung bewegter Bilder durch den Computer. Damit eine Bewegung entstehen kann, muss eine Vielzahl von Einzelbildern erstellt werden. Diese k önnen per
Hand gezeichnet, mittels Computer berechnet oder fotografiert sein. Werden diese
mit einer bestimmten Geschwindigkeit dargestellt (z.B. 24 Bilder pro Sekunde), so
entsteht beim Betrachter die Illusion von Bewegung. Die einfachste Form dieses
Phänomen einmal auszuprobieren ist die Erstellung eines Daumenkinos.
2.3.1 Verfahren
Die beiden wichtigsten Verfahren der Animation sind key-framing und motioncapturing. Beim key-framing werden Schlüsselpositionen einer Animation festgelegt. Der Computer bestimmt danach durch Interpolation die Zwischenpositionen. Beim motion-capturing fällt dieser Schritt zumeist weg, da alle Positionen
der Animation mittels Marker bestimmt und aufgezeichnet werden k önnen. Ist die
zeitliche Auflösung der Aufnahmen sehr groß, so kann man nachträglich eine Interpolation durchführen. Diese Animationstechniken werden seit einigen Jahren
verstärkt bei Film und Fernsehen eingesetzt. Vor allem bei der Animation von
Charakteren zum Beispiel in Spielfilmen geht es darum, möglichst realistische Bewegungen zu erstellen. Diese sollen einen flüssigen Eindruck erwecken, welche
ohne motion-capturing von Hand sehr aufwendig zu erstellen wären. Durch das
motion-capturing Verfahren lassen sich bei der Produktion sowohl Zeit als auch
Kosten einsparen. Um einen glaubwürdigen Bewegungsablauf zu gewährleisten
bedarf es der Berücksichtigung der Zeit. Ab 24 FPS2 genügt eine Animation dieser Anforderung. Die Interpolation der dafür notwendigen Einzelbilder nennt man
auch inbetweening“.
”
1 IMDB:
2 FPS:
The Internet Movie Database, www.imdb.com
Frames pro Sekunde
12
2.3.2
Beispielsysteme
Um einen Eindruck zu bekommen wie bestehende Systeme in technischer wie ergonomischer Sicht das Problem der Pfadanimation lösen, seien im Folgenden zwei
Beispielsysteme betrachtet. Die Funktionsvielfalt wie auch die Bedienung von Programmen im Bereich der 3D-Animation unterscheidet sich zum Teil beträchtlich.
Die professionelle Anwendung Alias Maya ist im kommerziellen Bereich von Film
und Fernsehen stark verbreitet, während Cinema4D von Maxon sich eher am semiprofessionellen Bereich orientiert. Im Folgenden wird verglichen, wie eine einfache Pfadanimation in beiden Programmen umgesetzt werden kann.
Alias Maya In Maya kann eine einfache Pfadanimation bereits in vier Schritten
erzeugt werden:
Ein Pfad ist dabei in Maya ein einfaches Objekt, welches durch das EP-Curve
”
Tool“ in den Raum gezeichnet werden kann. Durch die move-“ und rotate-Modifi”
”
katoren“ können die Kontrollpunkte verändert werden. Als nächstes wird ein einfaches Objekt wie zum Beispiel ein Polygon-Würfel erzeugt. Bei selektiertem Würfel
und Spline wird durch das Tool AttachToMotionPath“ das Objekt der Spline zu”
gewiesen. Anschließend kann die Animation gestartet werden und das Objekt, in
dem Fall der Würfel, bewegt sich entlang des Pfades (siehe Abb.9).
Abbildung 9: Eine beispielhafte Pfadanimation mit Maya
13
Maxon Cinema4D In Cinema4D bedarf es zweier Schritte mehr bis die Animation erstellt ist:
Zuerst wird auch hier ein Pfad erstellt, der anhand der gesetzten Kontrollpunkte
modifiziert werden kann. Objekte können wie in Maya erstellt oder geladen werden. Das in Cinema4D verwendete Konzept der Expressions hilft nun dabei den
Ausdruck Auf Spline ausrichten“ zu erzeugen. Der vorher erstellte Pfad wird nun
”
dieser Expression zugewiesen. Abschließend ist es notwendig, den Endframe festzulegen, damit das automatische Keying zwischen Start- und Endframe verwendet
werden kann (siehe Abb.10).
Abbildung 10: Eine beispielhafte Pfadanimation mit Cinema4D
In beiden Programmen herscht das Konzept der Objektorientierung vor. Im Wesentlichen ist die Bedienung sehr ähnlich, unterscheidet sich aber durch die Verwendung von unterschiedlichen Konzepten. Während bei Maya das Konzept der
Tools, welches auf Objekte angewandt wird vorherscht, so exisitiert in Cinema4D
das abstrakte Konzept der Expressions. Dieses wirkt auf den ersten Blick nicht intuitiv, kann aber bei komplexeren Projekten zu einer Arbeitserleichterung f ühren.
14
3 Interaktives Animations-System
Bei der Entwicklung eines Softwaresystems gilt es, egal für welchen Zweck das
System verwendet werden soll, wichtige Rahmenbedingungen zu ber ücksichtigen
und zu klären. Dabei ist es wichtig, die Frage nach den Inhalten und deren softwareergononischer Umsetzung zu stellen. Dies wird im Rahmen der Konzeption
abgehandelt. Das genauere Verhalten des Programms und dessen visuelle Erscheinungsformen werden mit der Behandlung des Layouts geklärt. Hier wird es darum
gehen, Fragen nach der Platzierung von Funktionalitäten innerhalb der Programmoberfläche zu klären und stets die Ergonomie der Bedienung im Auge zu behalten.
3.1
Konzeption
Die Konzeption eines Softwarsytems kann je nachdem wie frei sie gestaltet werden
kann auf sehr verschiedene Arten geschehen. Eine jede Konzeption kann jdedoch
mit einem kreativen Brainstorming begonnen werden, bei dem man die wichtigsten
Fragen vorab absteckt. Zuvor ist es wichtig, den Kreis der Benutzer zu bedenken.
Diese haben eine bestimmte Erwartung an das System je nachdem ob es sich um
einen Anfänger oder fortgeschrittenen Benutzer handelt. Unabhängig davon muss
festgelegt werden, welche Funktionen das Programm bieten soll und welche Aufgabenbereiche dadurch bearbeitbar und lösbar sein sollen. Dabei ist es sehr hilftreich bestehende Systeme zu untersuchen. Hierbei k önnen Funktionalitäten die,
subjektiv gesehen, gut umgesetzt sind, für das eigene System adaptiert werden.
Details, die sich mit der tatsächlichen Implementierung befassen und somit sehr
spezifisch und technisch sind, werden in dieser ersten kreativen Phase außer Acht
gelassen.
Ein anderer Ansatz die Konzeption eines Systems anzugehen, ist das System aus
einem programmiertechnischen Winkel zu betrachten. Hierbei ist vor allem wichtig, Fragen nach der Objektorientiertheit und den Schnittstellen zu klären. Dies
kann beispielsweise durch die vorangehende Erstellung eines Klassendiagramms
unter Verwendung von UML3 geschehen.
Ist die Verwendung von Programmiersystemen zur Umsetzung des eigentlichen
Systems begrenzt, so kann ein pragmatisches Konzept verfolgt werden. Dabei ist
einzubeziehen welche Funktionalitäten wie z.B die Verwendung von bestehenden
Klassenstrukturen zur Verfügung stehen und welche selbst zu implementieren sind.
Bei der Konzeption des vorliegenden Systems kann man von einer Synthese der
genannten Ansätze sprechen. Dabei wurde der kreative Ansatz stark von bekannten
Systemem wie Maya oder Cinema beinflusst, die bereits in Kapitel 2.3.2 vorgestellt
wurden. Um die Verwendung eines 3D-Systems allgemein konsistent zu halten und
somit die Erwartungskonformität zu erfüllen, ist das entwickelte System an diese
angelehnt.
3 UML:
Unified Modeling Language
15
Der eigentliche Konzeptionsablauf gestaltet sich wie folgt:
An welche Benutzergruppe richtet sich das Programm?
Die Zielgruppe besteht in erster Linie aus Personen, die sich mit 3D-Programmen
bisher schon auseinander gesetzt haben. Dies ist nicht unbedingt erforderlich, Vorkenntnisse in diesem Bereich erleichtern aber den Einstieg und die L ösung von
Aufgaben.
Wie lässt sich der Aufgabenbereich des Programms charakterisieren?
Hauptziel der Anwendung ist es, eine Möglichkeit zu geben, eine Pfadanimation
zu erstellen und diese nach Belieben zu modifizieren.
Welche Funktionalitäten sind dazu nötig?
Es gilt eine graphische Oberfläche zu erstellen, die Rahmen und Schnittstelle zum
Benutzer herstellt. Des Weiteren ist die Implementation von mathematischen Algorithmen notwendig: Zum Beispiel die Hermite-Splines zur Erstellung des Pfades
und das Picking (siehe 4.2), um die verschiedenen Objekte auswählen und danach
modifizieren zu können.
Wie setzen bestehende Systeme diese Funktionalitäten um?
Bestehende Systeme setzen dies in ähnlicher Art und Weise um. Im Grunde unterscheiden sich die Systeme nur durch Bedienung und Funktionsvielfalt (siehe 2.3.2).
Wie sind innerhalb dieser die Prioritäten verteilt?
Unter Priorität versteht man die Bevorzugung einer Funktionalität vor einer anderen. Es ist sehr wichtig diese Unterscheidung zu machen, da diese oft bei der Entwicklung vernachlässigt wird. Am Beispiel der Umsetzung eines Pfades ist es zuallererst notwendig eine Darstellung zu erstellen, die später durch weitere ergänzt
oder ersetzt werden kann. Es muss also konsequent zwischen Haupt- und Nebenfunktionalitäten unterschieden werden.
Welche Schritte sind zur Lösung der Aufgaben notwendig?
Es erscheint sinnvoll, die einfachste Umsetzung zur Lösung der Aufgabe zu finden. Wird diese Funktionalität im finalen Programm sehr oft verwendet, lohnt es
sich diese zu optimieren. Heutzutage stellt dies nicht mehr ein so großes Problem
dar, da heutige Rechenleistungen ausreichend sind. Wächst das System jedoch an,
so spielen sowohl Effektivität als auch Effizienz eine große Rolle. Bei der Frage
nach der Effektivität geht es darum, die Schritte minimal zu halten und auch die
Rechenzeit zu minimieren. Effizient ist die Lösung einer Aufgabe dann, wenn sie
in kurzer Zeit entstanden ist und das Problem auf ideale Art und Weise l öst.
16
Welche softwareergonomischen Grundsätze sollen umgesetzt werden?
Bezogen auf die Softwareergonomie gilt es, die Aufgaben auch f ür den Benutzer
effektiv und effizient lösbar zu gestalten. Die Abläufe sollten dabei so kurz wie
möglich und somit leicht erlernbar sowie reproduzierbar sein. Die Erwartung der
Anwender, die schon mit 3D-Systemen vertraut sind, sollten erf üllt werden. Dabei
geht es insbesondere darum, die bekannten Interaktionsmetaphern aus der 3D-Welt
umzusetzen und so den Konventionen gerecht zu werden. Von Beginn bis Ende der
Aufgabe sollte diese steuerbar bleiben und Hilfestellungen bereitstehen. Da bei einem 3D-System die Eingabe nicht immer vorab geklärt werden kann, ist es wichtig
eine falsche Eingabe abzufangen und das System somit fehlertolerant zu halten.
Wie soll die Systemarchitektur beschaffen sein?
Bei der technischen Seite der Konzeption geht es um die genauen Anforderungen
an die Standards der jeweiligen Architekturen. Es gilt dabei ein modernes, objektorientiertes Konzept zum Einsatz kommen, wie es sich für die Metapher der Objekte im 3D-Raum anbietet. Da in der Programmiersprache C++ eine umfangreiche Klassenbibliothek zur Lösung verschiedenster Aufgaben genutzt werden kann,
kommt diese im Zusammenspiel mit OpenGL zum Einsatz. Die Schnittstelle zum
Graphiksystem bildet somit dieses System. Andere Schnittstellen sollten zu Eingabegeräten wie Maus und Tastatur bestehen, die ebenfalls von diesen Systemen abgedeckt werden können. Eine eigene Schnittstelle ist für das Speichern und Laden
von Szenedaten von Vorteil. Die Klassenstruktur des Systems sollte klar voneinander getrennte Kernbereiche aufweisen und somit eine einfache Erweiterbarkeit
bieten. Das Prinzip der Vererbung ist so weit wie möglich einzuhalten um de Quellcode zu minimieren, damit die Übersichtlichkeit gewahrt bleibt.
Soll das Programm portabel sein?
Bei der Frage nach der Portabilität des Programms wurden verschiedene Systeme
wie wxWidgets4 oder Qt5 in Betracht gezogen. Die Umsetzung sollte letztendlich
auf wxWidgets geschehen, da der Einsatz unter anderen Betriebssystemen, vor allem Linux, leicht umsetzbar scheint.
4 wxWidgets:
5 Qt:
open-source cross-platform C++ GUI framework, www.wxwidgets.org
C++ application framework, www.trolltech.com/
17
3.2
Layout und Interaktion
Nachdem das Vorgehen bei der Gestaltung der Programmelemente im Konzeptionsprozess festglegt ist, folgt nun die Ausgestaltung der formulierten Anforderungen. Das Hauptelement der Programmoberfläche sollte ein einzelnes Fenster sein,
welches in mehrere konsistente Bereiche aufzuteilen ist. Diese Bereiche sollten
sich aus einer Menüleiste, einer Statusleiste, einem OpenGL-Bereich im Fenster
und einem Bereich für Bedienelemente zusammensetzen. Das Hauptaugenmerk
sollte dabei auf dem openGl-Bereich liegen, der im Vergleich zu den übrigen einen
größeren Bereich einnehmen sollte. Eine Interaktion sollte vor allem innerhalb
dieses Bereichs mit Hilfe der Maus und Tastatur stattfinden. Um diese Form der
Navigation zu erleichtern, sind zusätzlich ein Grid6 sowie die Koordinatenachsen
eingeblendet. Zusätzlich sollte eine Feinabstimmung von Parametern über die Bedienelemente, vor allem aber über separate Eingabefelder, möglich sein. Auf Icons
sollte allerdings verzichtet werden, um die Bedienung einfach zu halten und die
Erlernbarkeit zu steigern. Erstellungs- und Animationsmodus sollten über Karteireiter wählbare Modi gesetzt werden. Wichtige Informationen zur laufenden Bearbeitung der Szene bzw. zum Ablauf der Animation sollten in der Statusleiste
eingeblendet werden. Für weiterführende Informationen zum Arbeitsablauf sollte
ein Teilfenster mit chronologisch gesammelten Informationen dargestellt werden.
Ergebnis dieser Vorüberlegungen ist in der folgenden Graphik zu sehen:
Abbildung 11: Benutzungsoberfläche des Interaktiven Animations-Systems“.
”
6 Gitternetz
aus Linien
18
4 Implementation
Nach dem theoretischen Teil der Arbeit folgt nun die praktische Umsetzung, die
auf den genannten mathematischen und animationstechnischen Grundlagen aufbaut. Bei der Entwicklung des Animations-Systems geht es in erster Linie darum,
das Programm von Grund auf zu implementieren. In den kommenden Abschnitten
wird sowohl auf die verwendeten Sprachen und Tools als auch auf wichtige Codebeispiele eingegangen. Im weiteren Verlauf wird der Aufbau des Frameworks
dargestellt und einige Kernelemente näher erläutert.
4.1
Programmiersprachen und Tools
Programmiersprache
Darstellung
Layout / GUI
- Menüleiste
- Fenster
- Statusleiste
- Arbeitspanel & Controls
Interaktion
- Maus und Tastatur
Funktionalitäten
- Pfade erstellen und modifizieren
- Objekte laden
- Animation
- Orientierung
- Geschwindigkeit
Visual Studio C++ (Windows)
OpenGL
wxWidgets
Bezier, Hermite- und Catmull-Rom Kurven
Deep Exploration
Tabelle 1: Verwendete Programmiersprachen und Tools.
Gerade am Anfang der Implementation ist es wichtig sich einen Überblick über
mögliche Sprachen und Tools zu verschaffen. Im Folgenden wird darauf eingegangen, welche Sprachen und Tools verwendet worden sind. C++ ist inzwischen eine
der meist verwendetsten Programmiersprachen gerade was den Bereich der Objektorientierung angeht. Zur Graphikdarstellung kommt OpenGL zum Einsatz, da es
unproblematisch ist, dieses System bei einer späteren Portierung unter Linux einzusetzen, wenn auch ein paar Vorkenntnisse von Nutzen sein k önnen. Wer jedoch
eine Alternative zu OpenGL sucht, der kann DirectX unter Windows oder SDL 7
unter Linux einsetzen.
7 SDL:
Simple DirectMedia Layer, www.libsdl.org
19
Die Entscheidung eine möglichst geeignete und einfach zu handhabende GUI 8 zu
finden, ist nicht ganz einfach. Schließlich ist die Entscheidung f ür wxWidgets gefallen, welches unabhängig von Betriebssystem und Programmiersprache eingesetzt werden kann. Die Portierung auf Linux ist aus Zeitgründen noch nicht getestet
worden, weswegen noch kein Beleg für die vorangegangene Behauptung geliefert
werden kann. Um sich die Arbeiten bei der Layoutgestaltung zu vereinfachen, kann
das Tool DialogBlocks eingesetzt werden. Der dabei entstehende Quellcode kann
mit leichten Veränderungen im eigenen wxWidgets-Projekt verwendet werden. Des
Weiteren wurde das Tool ”Deep Exploration”genutzt, um modellierte Objekte zum
Beispiel aus Maya in die C++ Umgebung zu importieren. An dieser Stelle wäre
ein eigener Importer sicherlich wünschenswert, der später nach Belieben ergänzt
werden kann.
4.2
Framework
Das Framework setzt sich aus einer Hauptklasse main“ und einigen Nebenklas”
sen zusammen; diese sind in folgende Bereiche unterteilt: Tools, Libs, Points und
Splines. In der Hauptklasse werden sowohl die Fenster als auch die graphischen
Bedienelemente wie zum Beispiel Schaltflächen, Textfelder etc. erstellt und initialisiert. Die Positionierung der Elemente im Fenster ist nicht immer intuitiv, lehnt
sich aber an das sizer“ Konzept an, was nicht nur in wxWidgets verwendet wird.
”
Im Folgenden wird eine Technik erläutert, die zur Auswahl von Objekten notwendig ist:
Picking Um ein Mindestmaß an Interaktion zu ermöglichen, wird in OpenGL die
Technik des Pickings verwendet. Es geht hierbei darum, mittels der Maus in dem
Viewport einer Szene zu zeigen bzw. zu klicken und somit ein anvisiertes Objekt
als selektiert zu markieren. Dabei ist es egal ob Punkte, Linien oder ganze Objekte
selektiert werden sollen. Das Picking kann auf verschiedene Arten implementiert
werden. Zum Beispiel über einen selection buffer“, Farbcodierung oder ray inter”
”
section“. OpenGL bietet mit den Funktionen glReadPixels und gluUnProject eine
Art Ray-Intersection-Test an. Damit der Picking-Strahl aber nicht ins Leere trifft,
muss der Framebuffer erstmal gefüllt werden; das hat zur Folge, dass zu der im
Viewport selektierten Stelle ein korrespondierender Wert im Framebuffer existieren muss.
Am einfachsten ist es, eine virtuelle Fläche in den Raum zu zeichnen. Virtuell
deshalb, da diese nur zur Berechnung temporär erstellt und nicht im Programm
dargestellt wird. Dabei gilt es, die Flächengröße zu beachten da ein Strahl, der
keinen Schnittpunkt findet, quasi undefiniert bleibt und an einer unvorhersehbaren
Stelle eingetragen wird.
8 GUI:
Graphical User Interface
20
Der Codeausschnitt in Listing 1 zeigt eine mögliche Umsetzung der Picking-Technik;
diese ist zwar nicht die effizienteste Variante aber eine recht einfach zu implementierende. Wichtig ist jedoch die Behandlung der y-Koordinate, die in den meisten
Fällen die y-Koordinate des Schnittpunktes von Strahl und temporärer Fläche annimmt. Wird diese jedoch geändert, kann es Probleme beim späteren Picking zum
Beispiel von y1 oder y2 geben (siehe Abb.12).
Höhenlinie
2D window coordinate
y2
3D object coordinate
y1
temporäre Fläche
Abbildung 12: Höhenkoordinate beim Picken.
21
/**
* Method to calculate the window coordinates into object coordinates
*
window coordinate for width
* \param x
window coordinate for height
* \param y
*/
const Vector3 & OpenGLHelper :: get3DByGLUnProject (const int& x ,
const int& y) const
{
GLint viewport [4];
GLfloat winX , winY , winZ ;
GLdouble modelview [16];
GLdouble projection [16];
GLdouble posX , posY , posZ ;
glGetDoublev ( GL_MODELVIEW_MATRIX , modelview );
glGetDoublev ( GL_PROJECTION_MATRIX , projection );
glGetIntegerv ( GL_VIEWPORT , viewport );
// transform from window upper-left(0,0) to lower-left(0,0),
// x-coordinate stays equal
winX = (float)x;
winY = (float) viewport [3] - (float)y;
// read a block of pixels from the framebuffer
glReadPixels ( x , int( winY ), 1, 1, GL_DEPTH_COMPONENT , GL_FLOAT ,
& winZ );
// replace the current matrix with the identity matrix
glLoadIdentity ();
// map window coordinates to object coordinates
gluUnProject ( winX , winY , winZ , modelview , projection , viewport ,
& posX , & posY , & posZ );
return Vector3 ( posX , posY , posZ );
}
Listing 1: Quellcode zur Umwandlung der aktuellen Mausposition in 3D ObjektKoordinaten.
22
5 Zusammenfassung und Ausblick
In dieser Arbeit wurde ein inzwischen sehr umfangreiches Thema der Computergraphik, die Pfadanimation betrachtet. Die anfangs näher erläuterten Grundlagen
der Interpolation und Animation werden auch in anderen Bereichen der Computergraphik genutzt und bilden somit wichtiges Basiswissen f ür jeden Computergraphiker. Das dabei entstandene Framework baut auf diesen Grundlagen auf und
durchläuft alle Schritte hinsichtlich softwaretechnischer Anforderungen; diese reichen von der Gestaltung der Benutzungsoberfläche über die Interaktionsmöglichkeiten durch den Anwender sowohl über die Maus als auch die Tastatur und schließlich die Integration der implementierten Algorithmen. Obwohl versucht wurde,
sich auf die wesentlichen Funktionen zu konzentrieren, konnten diese bisher nicht
alle im vollen Umfang ins System integriert werden. Insbesondere wurde bei der
Implementierung großer Wert darauf gelegt, das Framework wie eine Art Baukastensystem jederzeit, mit möglichst geringem Aufwand, erweiterungsfähig zu
halten.
Konkret wurden folgende Ziele erreicht:
Die Hauptaufgabe des Animationssystems, also die Erstellung eines Pfades wie
auch die Animation eines Objektes entlang dessen, wurde umgesetzt. Es sind sowohl Hermite Splines als auch Bezier Splines implementiert, da diese von Seiten der Berechnung geeignet und leicht umzusetzen erschienen. Der Vorteil von
Hermite-Splines war hierbei die Tatsache, dass ein geschlossener Pfad relativ einfach erstellt werden konnte, wohingegen die Tangenten von Bezier-Splines durch
das De-Casteljau-Verfahren schnell zu berechnen sind. Die Orientierung des animierten Objekts sollte durch Veränderung der Tangenten beeinflusst werden. Dies
wurde erreicht, jedoch ist die Bewegung in dem Sinne bisher noch nicht realistisch als dass sich das Objekt nicht an der Spline ausrichtet. Die Implementation
einer Pseudophysik und der damit verbundenen Kurvenlage des Objekts ist bisher
von Seiten der Implementierung unvollständig. Auch die Auswirkung von Steigung und Gefälle auf die Animation konnte bisher noch nicht in das System einfließen. Die graphische Präsentation wurde ansprechend gestaltet, wobei sich diese
an den gängigen Schemata etablierter Animationssysteme anlehnt. Daraus folgt sogleich die softwareergonomische Erwartungskonformität da ein Benutzer, der das
System erstmalig benutzt, wahrscheinlich eine Vorstellung von dessen Bedienung
hat. Das Laden und Speichern von Pfaden wurde umgesetzt, wobei noch aussteht,
ganze Szenen zu speichern sowie zu importieren. Die Konsistenz des Frameworks
ist durch den modularen Aufbau gewährleistet wie auch die Erweiterbarkeit des
Systems an sich. Da die Kernbereiche strikt in interaktions- animations- und systemspezifische Bereiche aufgeteilt wurden, ist die Zurechtfindung im Quellcode
erleichtert.
23
Ausblick: Da das Animationssystem zu diesem Zeitpunkt noch nicht alle zu
anfangs angedachten Funktionen enthält, ist es sinnvoll, folgende Erweiterungen
und Verbesserungen noch umzusetzen:
• Die Erstellung einer möglichst naturgetreuen Physiksimulation.
• Vervollständigung von Importer und Exporter, sowohl von einzelnen Elementen als auch der kompletten Szene.
• Erweiterung der bisher verfügbaren Objektstruktur (Grundkörper und deren
Manipulation, Bildung von Objektgruppen etc.).
• Visualisierung der Animationspfade durch Schienen oder ähnlichem.
• Erweiterung und Vereinfachung der Tangentenmanipulation.
• Hinzufügen von weiteren Spline Kurven und eine Konvertierung zwischen
diesen zu ermöglichen.
24
Abbildung 13: Einfaches Fenster mit Menü- und Statusleiste.
Abbildung 14: OpenGL-Fenster im Hauptfenster integeriert.
25
Abbildung 15: Layoutgestaltung und Darstellung von einem einfachen Objekt.
Abbildung 16: Importiertes Maya-Objekt und erstellter Pfad im OpenGL-Fenster.
26
Literatur
[Bender und Brill, 2003] Michael Bender und Manfred Brill. Computergrafik: Ein
anwendungsorientiertes Lehrbuch. Carl Hanser Verlag, 2003.
[Müller, 1996/97] Holger Müller. Lagrange interpolation applet, 1996/97.
http://www.gris.uni-tuebingen.de/projects/grdev/applets/lagrange/GermanApplet.html.
[Parent, 2002] Rick E. Parent. Computer Animation: Algorithms and Techniques.
Academic Press, 2002.
[Shirley, 2002] Peter Shirley. Fundamentals of Computer Graphics. AK Peters,
AKP, 2002.
27