Grundlagen der Physik

In diesem Kapitel lernen wir wie man Raumschiffe im All bewegt und worauf man dabei achten muss.

Euler Winkel

Wir schauen uns zur Erinnerung nochmal das uralte Video Euler (gimbal lock) Explained an. Es zeigt anschaulich was Gimbal Lock ist und gibt Hinweise wie man dieses Problem vermeiden kann.

Dieses Problem tritt in erster Linie bei Animationen auf. Also bei vordefinierten Bewegungen die zwischen einem Start- und Endpunkt interpoliert werden. In Spielen tritt dies vor allem auf, wenn die Kamera fließend animiert wird. Was ich damit meine sehen Sie unter anderem in den ersten 30 Sekunden dieses Videos.

Hier wird für jeden Frame eine Sollposition der Kamera berechnet und dann von der Grafikengine eine fließende Bewegung berechnet um von der aktuellen Position auf die gewünschte Position zu kommen. Dabei entsteht der Eindruck, dass die Kamera nicht fest am Raumschiff hängt und es entsteht ein stärkeres Gefühl für die Bewegung.

Quaternionen

Bei der Simulation von Spieler-steuerbaren Objekten (insbesondere bei Flugzeugen, Raumschiffen, etc.) hilft uns dieses Wissen jedoch nur begrenzt, denn die Bewegungsfreiheit ist essenziell wichtig. Hier kommen Quaternionen ins Spiel.

Quaternionen sind ein Zahlenbereich und erweitern die reellen Zahlen. In unserer Implementierung werden sie als Struktur mit 4 Float Werten x, y, z und w dargestellt.

Die ersten 3 Komponenten eines Quaternions beschreiben eine Rotationsachse, die 4. Komponente beschreibt einen Winkel um diese Achse. Mit diesen beiden Informationen lässt sich jede beliebige Rotation im dreidimensionalen Raum eindeutig beschreiben.

In der Anwendung verhalten sich Quaternionen ähnlich wie Matrizen denn man kann sie miteinander multiplizieren um mehrere Rotationen zu kombinieren. Quaternionen bei der Multiplikation allerdings weniger rechenintensiv als Matrizen und bieten sich daher immer dann an, wenn man viele solche Berechnungen auf der CPU ausführen muss.

Quaternionen kann man jederzeit wieder in eine klassische Rotationsmatrix umwandeln um sie an die Grafikkarte zu senden. Sie bieten sich also insbesondere auf der CPU für die Physikberechnung an.

Sind Quaternionen also ein kompletter Ersatz für Euler Winkel? Nein. Euler Winkel sind für den Anwender immer noch leichter verständlich und werden auch in der Realität in Flugzeugen oder Raumfahrzeugen auf den Instrumenten angezeigt. Die Flugrichtung wird als Kompasskurs als Zahl zwischen 0 und 360 Grad angegeben. Der Anstellwinkel (steigen oder sinken) wird in Grad oder als Linien parallel zum Horizont auf dem Monitor angezeigt

Auch gut zu wissen: Unser Kamerasystem ist mit Euler Winkeln viel einfacher zu implementieren. Der zusätzliche Freiheitsgrad den eine komplett freie Kamera bieten würde, kann beim Spieler sogar zu mehr Verwirrung führen. Probieren Sie es gerne mal aus.

Es ist wichtig diese Grundlagen zu verstehen um selbst einschätzen zu können wann und wo der Einsatz von Quaternionen Sinn macht.

Steuerung des Raumschiffs

Das Raumschiff in der Szene lässt sich mit den Tasten A und D entlang der Querachse bewegen. Die Tasten W und S führen zu einer Bewegung entlang der Längsachse. Mit SPACE und LCTRL lässt sich die Bewegung entlang der Hochachse steuern.

Analog dazu lässt sich das Raumschiff um die einzelnen Achsen wie folgt rotieren: J und L führt zum Rollen um die Längsachse. I und K führt zum Nicken um die Querachse. U und O führt zum Gieren um die Hochachse.

Probieren Sie aus, ob es Ihnen gelingt einmal um die THM Kisten herum zu fliegen und danach wieder in der Mitte der Landezone zum Stillstand zu kommen.

Wir wollen uns heute damit beschäftigen diese Steuerung zu vereinfachen, dabei aber die Grenzen der Physik nicht zu verletzen.

Flight Assist

Da die Steuerung in der hier gezeigten Form ziemlich kompliziert ist, benötigen wir eine Vereinfachung für unseren Piloten. Dabei orientieren wir uns an den Steuersystemen realer Raumschiffe wie sie z.B. in der Dragon Kapsel von SpaceX aber auch in vielen Computerspielen zum Einsatz kommen.

Schauen Sie sich diesbezüglich auch gerne den ISS Simulator von SpaceX an um einen Eindruck zu bekommen, welche Steuermöglichkeiten die echten Astronauten haben.

Unser Ziel ist es, die Tasteneingaben des Spielers nicht mehr direkt als Beschleunigung zu interpretieren sondern als Zielwert der Geschwindigkeit. Drückt der Spieler die Taste, wird die Zielgeschwindigkeit auf 3 m/s gesetzt. Anschließend berechnen wir die Differenz von Zielgeschwindigkeit und aktueller Geschwindigkeit und passen die Beschleunigung entsprechend an. Lässt der Spieler alle Tasten los sind alle Zielgeschwindigkeiten 0 und es werden Beschleunigungswerte gesetzt um das Schiff zu stoppen.

Aufgaben

1. Quaternionen verstehen

1.1: Erarbeiten Sie eine Liste von Anwendungsfällen bei denen Quaternionen sinnvoll sind und bei welchen nicht. Stellen Sie sicher, dass Sie das in einer Prüfung begründen und argumentieren können. Hier hilft Google aber noch viel eher YouTube bei der Recherche.

2. Steuerung verstehen und erweitern

2.1: Machen Sie sich mit den Bezeichnungen der einzelnen Achsen vertraut damit Sie diese in der Prüfung sicher verwenden können. Eine passende Erklärung finden Sie z.B. hier.

2.2: Machen Sie sich mit der Steuerung in der Funktion shipControl in der Klasse Logic vertraut. Stellen Sie sicher, dass Sie genau verstehen, was dort passiert. Wichtig: Können Sie erklären was der Unterschied zwischen den absoluten Koordinaten und den relativen Koordinaten in Relation zum Schiff ist und in welchem dieser beiden Referenzsysteme hier die Beschleunigung berechnet wird?

2.3: Erweitern Sie den Code so dass die Werte von a und aa als Vektoren angegeben werden um unterschiedliche Werte für die einzelnen Achsen angeben zu können.

2.4: Machen Sie eine Ausgabe auf die Konsole um Beschleunigung und Geschwindigkeit entlang der 3 Achsen leicht ablesbar zu machen. Prüfen Sie ob Ihre Ausgabe Sinn ergibt und stellen Sie sicher, dass Sie verstanden haben, welche Achse in welche Richtung zeigt. Passen Sie danach Ihre Ausgabe so an, dass nicht mehr absolute Werte entlang der Koordinatenachsen angezeigt werden, sondern Werte entlang der Schiffsachsen. Wenn Sie ihr Schiff rotieren sollten sich die Werte ändern.

2.5: Ändern Sie nun das Verhalten der Steuerung indem Sie einen Vektor für die Zielgeschwindigkeit entlang der Schiffsachsen definieren und diesen per Tastendruck beeinflussen lassen. Geben Sie diesen ebenfalls aus.

2.6: Passen Sie die Berechnung der Beschleunigung so an, dass diese in Abhängigkeit von der Zielgeschwindigkeit gesetzt wird.

2.7: Fassen Sie die Erkenntnisse dieses Kapitels sinnvoll zusammen.

Diese Seite speichern:
Redvery Journal
Computergrafik-Effiziente-Algorithmen-3.trj
Seite speichern
Computergrafik-Effiziente-Algorithmen-3.trj
Redvery Journal ist ein modernes Dateiformat mit dem diese Seite incl. aller Bilder und Anhänge gespeichert und offline verwendet werden kann.

Die passende App dazu gibt es kostenlos unter www.redvery.com/journal
Speichern
Abbrechen