Neues Kamerasystem
In diesem Kapitel führen wir eine neue Kameraklasse ein. Damit können wir Kameraobjekte in der 3D-Umgebung platzieren und geben dem Spieler mehr Freiheiten die Anzeige und Navigation in der Spielwelt zu steuern.
Der Spieler kann mit der Taste Tab zwischen den einzelnen Objekten der Szene wechseln und mit der Taste C zwischen den Kameras des jeweiligen Objektes.
Jede Kamera hat einen Namen der sich über die Konfigurationsdatei ändern lässt. Der Name wird beim Umschalten in der Konsole ausgegeben.
Die Kamera unterstützt zwei Betriebsmodi:
- Fixiert (fixed)
- Orbital (orbit)
Der fixierte Kameramodus fixiert die Kamera an einer definierten Stelle genau wie ein Stativ in der Realität. Über die weiteren Parameter kann die Kamera dann an dieser Position in verschiedene Richtungen geschwenkt werden. Dies ermöglicht dem Spieler, den Blickwinkel auf die Spielwelt zu ändern.
e <name-of-entity>
c <name-of-camera> fixed <pos-x> <pos-y> <pos-z> <rot-x> <rot-y> <rot-z>
Der orbitale Kameramodus hingegen platziert die Kamera auf einer Kreisbahn um einen definierten Punkt. In der Realität erreicht man dies mit einer Drone die sich frei bewegen kann, deren Kamera aber immer auf einen definierten Punkt schaut. Der Spieler kann damit das Zielobjekt aus verschiedenen Blickwinkeln betrachten.
e <name-of-entity>
c <name-of-camera> orbit <pos-x> <pos-y> <pos-z> <yaw> <pitch> <distance>
Beide Kameratypen sind immer an einem Objekt verankert und bewegen sich mit dessen Bewegungen mit. Um globale Kameras zu platzieren kann ein leeres Objekt definiert werden, wie hier in den Beispielen gezeigt.
Aufgaben
Machen Sie sich mit dem aktuellen System vertraut. Schauen Sie dazu in die Konfigurationsdateien und analysieren Sie den Code.
1. Anwendungsfälle und Grenzen
1.1: Beschreiben Sie mögliche Anwendungsfälle des aktuellen Kamerasystems in dem Sie Spiele oder sonstige Anwendungen der Computergrafik vorstellen, in denen das aktuelle Kamerasystem unverändert genutzt werden kann.
1.2: Stellen Sie Anwendungsfälle vor bei denen das hier implementierte System an seine Grenzen stößt und beschreiben Sie warum.
2. Implementieren Sie Limits
In der vorliegenden Version ist die orbitale Kamera komplett frei beweglich und die fixierte Kamera lässt sich mit der Maus garnicht steuern. Es gibt bereits eine Funktion setLimits in der Kamera, deren Verwendung ist allerdings in der scene.cpp auskommentiert und die übergebenen Werte ändern auch aktuell nichts am Verhalten der Engine.
Außerdem ist der gewählte Ansatz nicht gut. Er würde die Konfigurationsdatei unleserlich und vielleicht sogar inkompatibel mit vorherigen Versionen machen.
2.1: Überlegen Sie sich ein Konzept um dieses Feature sinnvoll zu implementieren. Achten Sie darauf, dass alle Änderungen an der Konfigurationsdatei abwärts- und aufwärtskompatibel sein müssen.
2.2: Beschreiben Sie warum abwärts- und aufwärtskompatibel hier Sinn macht und was das genau bedeutet.
2.3: Stellen Sie mindestens 3 konkrete Anwendungsfälle vor die mit Hilfe von Limits umsetzbar sind. Geben Sie konkrete Beispiele.