Camera

From Valve Developer Community
< De
Jump to navigation Jump to search
English (en)Deutsch (de)Русский (ru)Translate (Translate)

Kamerasteuerung im Source SDK

Die Kamerasteuerung streut sich über mehrere Quelldateien im Source SDK, ist aber stark unter der CInput- (oder CSDKInput-) Klasse zentralisiert. Die meisten Anpassungen der Kamerasteuerung können durch das Bearbeiten der CInput-Klasse selbst oder durch Anpassungen der CSDKInput erreicht werden. Wenn die CInput-Klasse selbst angepasst wird, wird es schwieriger, Updates des Source SDKs zu verfolgen; Auf der anderen Seite müssen bei der Benutzung der CSDKInput-Klasse wahrscheinlich sehr viele Methoden der CInput-Klasse überschrieben oder ersetzt werden.

Grundlegende Konzepte

Bevor die Änderungen durchgeführt werden, sollte man wissen, wie die Kamera dem Rest der Engine präsentiert wird. Die Kameraposition und -Richtung werden typischerweise durch Offset-Korrdinaten relativ zum Spieler dargestellt. Man kann sich diese Offsets als Richtungen vorstellen, die die Position der Kamera ausgehend vom Spieler bestimmen:

  • Drehe zuerst die vertikale Achs um die "Yaw"-Komponente des Offset-Vektors (dies bewegt die Kamera nach rechts oder links).
  • Drehe dann die horizontale Achse die "Pitch"-Komponente des Offset-Vektors (dies bewegt die Kamera nach oben oder unten).
  • Bewege dich letztendlich um die Distanz-Komponente des Offset-Vektors rückwärts in der Richtung, in die du nun schaust.

Der Kamera-Offset wird im m_vecCameraOffset-Vektor gespeichert. Auf die "Pitch"-, "Yaw"-, und Distanzkomponenten kann über die vordefinierten enum-Werte (PITCH, YAW, and DIST) zugegriffen werden.

Relevante Dateien

Primäre Dateien:

  • game\client\iinput.h Änthalt die abstrakte Klasse, die CInput implementiert.
  • game\client\input.h enthält die Haupt-CInput-Klasse.
  • game\client\in_camera.cpp enthält den meisten Teil der Third-Person-Kameraimplementierung.
  • game\client\sdk\sdk_in_main.cpp enthält die CSDKInput-Klasse, welche zum Überschreiben der Funktionalität von CInput verwendet werden kann.

Sekundäre Dateien:

  • game\client\in_mouse.cpp beinhaltet den Code, um den idealen Kamera-Offset ausgehend von der Mausbewegung im Third-Person-Modus zu aktualisieren.

Wie die Third-Person-Kamera arbeitet

Im wesentlichen besitzt die CInput-Klasse vollen zugriff auf alle Tastatur- und Mauseingaben des Clients. Somit kann sie die Informationen über die Mausbewegung nutzen, um die Kameraposition zu beeinflussen. Während die Kamera sich bewegt, aktualisiert der Client die cam_idealpitch- und cam_idealyaw-ConVars, um Informationen über die Position zu liefern, an welcher Stelle sich die Kamera idealerweise befinden sollte. Anhand dieser Informationen wird die CInput::CAM_Think-Methode den tatsächlichen Offset der Kamera aktualisieren , um die Mausbewegung nachzuvervolgen. Dieses Nachverfolgen wird mit einer kleinen Verzögerung durchgeführt, um einen hübschen Effekt zu erzielen und nicht direkt auf die neue Position zu springen.

Zusätzlich erledigt die CInput::CAM_Think-Methode grundlegende Kollisionserkennungen mit der Kamera, um sicherzustellen, dass sie nicht durch eine Wand durchragt. Die Kamera wird sich automatisch näher zum Spieler bewegen, sollte sich etwas zwischen dem Spieler und der Kameraposition befinden.