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.
VecgetPos ()
 Getter fuer die Position der Camera im 3D Raum.
VecgetDir ()
 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 CameragetInstance ()
 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

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]

Vec Camera::m_vecPos [private]

Vec Camera::m_vecDir [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:

Generated on Sun Nov 1 16:26:43 2009 for engine3d by doxygen 1.5.5