# Camera Klassenreferenz

Repraesentiert die Camera, bzw. das Auge des Spielers das in der Spitze des Frustums sitzt. Konkret wird die Camera in der Map bewegt. Nach einem 'Move' wird die Transformationsmatrix der Camera bezogen zum zum Ursprung berechnet um anschliessend die Weltobjekte in das Frustum zu transformieren. Mehr ...

`#include <Camera.h>`

Aufstellung aller Elemente

## Öffentliche Typen
enum | STEP_DIR { STOP, STEP_FORWARD, STEP_BACKWARD, STRAFE_LEFT, STRAFE_RIGHT, STEP_LEFT, STEP_RIGHT, STEP_UP, STEP_DOWN, ROTATE_LEFT, ROTATE_RIGHT }
## Öffentliche Methoden
virtual | ~Camera ()
| Destruktor.
void | action ()
| Wird in der Gameloop vor jedem Frame aufgerufen um die Kameraposition neu zu berechnen.
void | move (STEP_DIR step)
| Setter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.
STEP_DIR | isMoving ()
| Getter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.
void | lift (STEP_DIR step)
| Setter fuer die auszufuehrende Hoch-/Runterbewegeung.
STEP_DIR | isLifting ()
| Getter fuer die auszufuehrende Hoch-/Runterbewegeung.
void | strafe (STEP_DIR step)
| Setter fuer die auszufuehrende Seitwaertsbewegeung.
STEP_DIR | isStrafing ()
| Getter fuer die auszufuehrende Seitwaertsbewegeung.
void | rotate (STEP_DIR step)
| Setter fuer die auszufuehrende Drehbewegung.
STEP_DIR | isRotating ()
| Getter fuer die auszufuehrende Drehbewegung.
int | getZone ()
| Liefert die aktuelle Zone zurueck, in der sich die Camera befindet.
void | setZone (int zone)
| Setzt die Zone in der sich die Camera befindet.
void | setPos (float x, float y, float z)
| Setter fuer die Position der Camera im 3D Raum.
void | setDir (float x, float y, float z)
| Setter fuer die Blickrichtung der Camera im 3D Raum.
Vec & | getPos ()
| Getter fuer die Position der Camera im 3D Raum.
Vec & | getDir ()
| Getter fuer die Blickrichtung der Camera im 3D Raum.
void | stepForward ()
| Ein Step nach vorne (inkl. Kollisionserkennung).
void | stepBackward ()
| Ein Step zurueck (inkl. Kollisionserkennung).
void | stepStrafeRight ()
| Ein Step nach Rechts (inkl. Kollisionserkennung).
void | stepStrafeLeft ()
| Ein Step nach Links (inkl. Kollisionserkennung).
void | stepUp ()
| Ein Step nach Oben.
void | stepDown ()
| Ein Step nach Unten.
void | stepTurnRight ()
| Nach rechts drehen.
void | stepTurnLeft ()
| Nach links drehen.
void | aimUp ()
| Nach oben blicken.
void | aimDown ()
| Nach unten blicken.
void | incMove ()
| Pendelbewegung beim laufen simulieren: Beim gehen und laufen bewegt sich auch das Auge des Spielers/Camera auf und ab. Dies wird hier durch eine Sinusfunktion simuliert. Die Wahl der Parameter steps und alti sind durch ausprobieren festgelegt worden. Alles andere sieht wie das Gehen mit einem Holzbein aus...
bool | collision (int typ, int dir)
| Testet auf eine Kollision.
float | getLevel ()
| getLevel - Keine Ahnung mehr, was das macht...
void | dump ()
| Obligatorische Dump-Methode fuer debuging.
void | load (DataInputStream &dataIn)
| Liest das Camera-Objekt aus dem Inputstream.
void | save (DataOutputStream &dataOut)
| Serialisiert das Camera-Objekt in den Outputstream.
## Öffentliche, statische Methoden
static Camera * | getInstance ()
| Liefert die Singleton-Instanz.
## Geschützte Methoden
| Camera ()
| Konstruktor.
## Private Attribute
STEP_DIR | m_moving
STEP_DIR | m_lifting
STEP_DIR | m_strafing
STEP_DIR | m_rotating
Vec | m_vecPos
Vec | m_vecDir
Vec | m_vecPosNext
Vec | m_vecDirNext
Vec | m_vecPosColl
Vec | m_vecDirColl
float | m_stepColl
float | m_stepAnim
float | m_step
int | m_turn
int | m_zone
int | m_HOG
int | m_moverCount
float | m_moverDeltaY
## Statische private Attribute
static Camera * | _instance = 0

## Ausführliche Beschreibung

Repraesentiert die Camera, bzw. das Auge des Spielers das in der Spitze des Frustums sitzt. Konkret wird die Camera in der Map bewegt. Nach einem 'Move' wird die Transformationsmatrix der Camera bezogen zum zum Ursprung berechnet um anschliessend die Weltobjekte in das Frustum zu transformieren.

Ausserdem testet die Camera vor jedem Move, ob der Spieler gegen eine Wand gerannt ist:

Bei den Kollsisionsabfragen wird aus dem aktuellen Standpunkt und dem naechsten Standpunkt ein Strahl ermittelt. Schneidet dieser Strahl eine Tile, so hat eine Kollision stattgefunden. Die Kamera darf sich dann NICHT zu diesem neuen Standpunkt bewegen (man koennte dann ja durch Waende gehen) Um eine rel. langsame und weiche Bewegung im Raum zu erreichen, ist die Distanz pro Step recht kurz. Daraus folgt, das die Camera sich auch sehr nah an eine WALL annaehern kann, was aber zu Render- bzw. Clippingproblemen fuehrt. Deshalb wird fuer die Collisionsabfrage eine groessere Distanz gefordert. Dazu gibt es hier die m_vecPosColl, m_vecDirColl und m_stepColl. Fuer die Kollision gegen ein PORTAL muss allerdings wieder die normale Schrittweite genommen werden, da sonst ein Portaluebergang zu frueh angezeigt wird, obwohl die Camera sich mit dem naechsten Step noch in der alten Zone befindet.

MOVE_FORWARD MOVE_BACKWARD MOVE_STOP MOVE_DOWN MOVE_UP MOVE_STOP STRAFE_LEFT STRAFE_RIGHT STRAFE_STOP ROTATE_LEFT ROTATE_RIGHT ROTATE_STOP

## Dokumentation der Aufzählungstypen

enum Camera::STEP_DIR

Aufzählungswerte:

  STOP |
  STEP_FORWARD |
  STEP_BACKWARD |
  STRAFE_LEFT |
  STRAFE_RIGHT |
  STEP_LEFT |
  STEP_RIGHT |
  STEP_UP |
  STEP_DOWN |
  ROTATE_LEFT |
  ROTATE_RIGHT |

## Beschreibung der Konstruktoren und Destruktoren

Camera::Camera | ( |  | ) | `[protected]`

Konstruktor.

Camera::~Camera | ( |  | ) | `[virtual]`

Destruktor.

## Dokumentation der Elementfunktionen

Camera * Camera::getInstance | ( |  | ) | `[static]`

Liefert die Singleton-Instanz.

Rückgabe:
  Pointer auf die Instanz

void Camera::action | ( |  | ) |

Wird in der Gameloop vor jedem Frame aufgerufen um die Kameraposition neu zu berechnen.

void Camera::move | ( | STEP_DIR | step | ) |

Setter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.

Parameter:

  | step | STOP, STEP_FORWARD, STEP_BACKWARD

Camera::STEP_DIR Camera::isMoving | ( |  | ) |

Getter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.

Rückgabe:
  STOP, STEP_FORWARD, STEP_BACKWARD

void Camera::lift | ( | STEP_DIR | step | ) |

Setter fuer die auszufuehrende Hoch-/Runterbewegeung.

Parameter:

  | step | STOP, STEP_UP, STEP_DOWN

Camera::STEP_DIR Camera::isLifting | ( |  | ) |

Getter fuer die auszufuehrende Hoch-/Runterbewegeung.

Rückgabe:
  STOP, STEP_UP, STEP_DOWN

void Camera::strafe | ( | STEP_DIR | step | ) |

Setter fuer die auszufuehrende Seitwaertsbewegeung.

Parameter:

  | step | STOP, STRAFE_LEFT, STRAFE_RIGHT

Camera::STEP_DIR Camera::isStrafing | ( |  | ) |

Getter fuer die auszufuehrende Seitwaertsbewegeung.

Rückgabe:
  STOP, STRAFE_LEFT, STRAFE_RIGHT

void Camera::rotate | ( | Camera::STEP_DIR | step | ) |

Setter fuer die auszufuehrende Drehbewegung.

Parameter:

  | step | STOP, ROTATE_LEFT, ROTATE_RIGHT

Camera::STEP_DIR Camera::isRotating | ( |  | ) |

Getter fuer die auszufuehrende Drehbewegung.

Rückgabe:
  STOP, ROTATE_LEFT, ROTATE_RIGHT

int Camera::getZone | ( |  | ) |

Liefert die aktuelle Zone zurueck, in der sich die Camera befindet.

Rückgabe:
  zone

void Camera::setZone | ( | int | zone | ) |

Setzt die Zone in der sich die Camera befindet.

Parameter:

  | zone |

void Camera::setPos | ( | float | x,
|  | float | y,
|  | float | z |
| ) |  |  |

Setter fuer die Position der Camera im 3D Raum.

Parameter:

  | x |
  | y |
  | z |

void Camera::setDir | ( | float | x,
|  | float | y,
|  | float | z |
| ) |  |  |

Setter fuer die Blickrichtung der Camera im 3D Raum.

Parameter:

  | x |
  | y |
  | z |

Vec & Camera::getPos | ( |  | ) |

Getter fuer die Position der Camera im 3D Raum.

Rückgabe:
  Referenz auf den Positionsvektor

Vec & Camera::getDir | ( |  | ) |

Getter fuer die Blickrichtung der Camera im 3D Raum.

Rückgabe:
  Referenz auf den Richtungsvektor

void Camera::stepForward | ( |  | ) |

Ein Step nach vorne (inkl. Kollisionserkennung).

void Camera::stepBackward | ( |  | ) |

Ein Step zurueck (inkl. Kollisionserkennung).

void Camera::stepStrafeRight | ( |  | ) |

Ein Step nach Rechts (inkl. Kollisionserkennung).

void Camera::stepStrafeLeft | ( |  | ) |

Ein Step nach Links (inkl. Kollisionserkennung).

void Camera::stepUp | ( |  | ) |

Ein Step nach Oben.

void Camera::stepDown | ( |  | ) |

Ein Step nach Unten.

void Camera::stepTurnRight | ( |  | ) |

Nach rechts drehen.

void Camera::stepTurnLeft | ( |  | ) |

Nach links drehen.

void Camera::aimUp | ( |  | ) |

Nach oben blicken.

void Camera::aimDown | ( |  | ) |

Nach unten blicken.

void Camera::incMove | ( |  | ) |

Pendelbewegung beim laufen simulieren: Beim gehen und laufen bewegt sich auch das Auge des Spielers/Camera auf und ab. Dies wird hier durch eine Sinusfunktion simuliert. Die Wahl der Parameter steps und alti sind durch ausprobieren festgelegt worden. Alles andere sieht wie das Gehen mit einem Holzbein aus...

bool Camera::collision | ( | int | typ,
|  | int | dir |
| ) |  |  |

Testet auf eine Kollision.

Parameter:

  | typ | forward, backward, ...
  | dir | Bewegungsrichtung

Rückgabe:
  true-->Kollision, false-->keine Kollision

float Camera::getLevel | ( |  | ) |

getLevel - Keine Ahnung mehr, was das macht...

Rückgabe:
  level

void Camera::dump | ( |  | ) |

Obligatorische Dump-Methode fuer debuging.

void Camera::load | ( | DataInputStream & | dataIn | ) |

Liest das Camera-Objekt aus dem Inputstream.

Parameter:

  | dataIn | DataInputStream

void Camera::save | ( | DataOutputStream & | dataOut | ) |

Serialisiert das Camera-Objekt in den Outputstream.

Parameter:

  | dataOut | DataOutputStream

Ausnahmebehandlung:

  | IOException |

## Dokumentation der Datenelemente

Camera * Camera::_instance = 0`[static, private]`

STEP_DIR Camera::m_moving`[private]`

STEP_DIR Camera::m_lifting`[private]`

STEP_DIR Camera::m_strafing`[private]`

STEP_DIR Camera::m_rotating`[private]`

Vec Camera::m_vecPos`[private]`

Vec Camera::m_vecDir`[private]`

Vec Camera::m_vecPosNext`[private]`

Vec Camera::m_vecDirNext`[private]`

Vec Camera::m_vecPosColl`[private]`

Vec Camera::m_vecDirColl`[private]`

float Camera::m_stepColl`[private]`

float Camera::m_stepAnim`[private]`

float Camera::m_step`[private]`

int Camera::m_turn`[private]`

int Camera::m_zone`[private]`

int Camera::m_HOG`[private]`

int Camera::m_moverCount`[private]`

float Camera::m_moverDeltaY`[private]`

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:

- D:/Project/engine3d/cplusplus/src/engine/Camera.h
- D:/Project/engine3d/cplusplus/src/engine/Camera.cpp