Back to bsyte

Camera Class Reference

Der Player blickt in der 3D-Raum durch eine (imaginaere) Kamera, die sich an der Spitze des Frustums befindet. Ueber Tastatur und Maus wird die Kamera im Raum bewegt. More...

#include <Camera.h>

Collaboration diagram for Camera:

List of all members.

Public Types

enum  STEP_DIR {
  STOP, STEP_FORWARD, STEP_BACKWARD, STRAFE_LEFT,
  STRAFE_RIGHT, LIFT_UP, LIFT_DOWN, ROTATE_LEFT,
  ROTATE_RIGHT, LOOK_UP, LOOK_DOWN
}

Public Member Functions

virtual ~Camera ()
 Destruktor - Speichert auch die aktuelle Kameraposition.
void action ()
 Wird in der Gameloop vor jedem Frame aufgerufen um die Kameraposition 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.
void look (STEP_DIR step)
 Setter fuer die auszufuehrende Drehbewegung.
STEP_DIR isLooking ()
 Getter fuer die auszufuehrende Drehbewegung.
int getZoneID ()
 Liefert die aktuelle Zonen-ID zurueck, in der sich die Camera befindet.
void setZoneID (int zoneID)
 Setzt die ZoneID fuer die Camera.
void setPos (float x, float y, float z)
 Setter fuer die Cameraposition im 3D Raum.
void setDir (float x, float y, float z)
 Setter fuer die Bewegungsvektor 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 liftUp ()
 Ein Step nach Oben (ohne Kollisionserkennung)
void liftDown ()
 Ein Step nach Unten (ohne Kollisionserkennung)
void stepTurnRight ()
 Nach rechts drehen.
void stepTurnLeft ()
 Nach links drehen.
void lookUp ()
 Nach oben blicken.
void lookDown ()
 Nach unten blicken.
void setDir (float xw, float yw)
void setFrameRate (float fps)
 Bei einer (angenommen) konstanten Framerate von 30 fps, liegt die konstante Rotationsgeschwindigkeit bei 2 Grad pro Frame.
void incMove ()
 Simulation der Pendelbewegung beim laufen: Beim laufen und beim gehen unterliegt der menschliche Koerper einer leichten Auf- und Abbewegung. Die daraus resultierende Kamerapendeln wird durch eine Sinusfunktion simuliert.
bool collision (int typ, int dir)
 Testet auf eine Kollision.
float getLevel ()
 getLevel
void dump ()
 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.
void load (void)
 Liest das Camera-Objekt aus dem Inputstream.
void save (void)
 Liest das Camera-Objekt aus dem Inputstream.

Static Public Member Functions

static CameragetInstance ()
 Liefert die Singleton-Instanz.

Public Attributes

Vec m_vecPos
Vec m_vecDir
Vec m_vecLook
float m_turn
float m_look

Protected Member Functions

 Camera ()
 Konstruktor.

Private Attributes

STEP_DIR m_moving
STEP_DIR m_lifting
STEP_DIR m_strafing
STEP_DIR m_rotating
STEP_DIR m_looking
Vec m_vecPosNext
Vec m_vecDirNext
Vec m_vecPosColl
Vec m_vecDirColl
float m_stepColl
float m_stepAnim
float m_step
int m_zoneID
int m_HOG
int m_moverCount
float m_moverDeltaY

Static Private Attributes

static Camera_instance = 0

Detailed Description

Der Player blickt in der 3D-Raum durch eine (imaginaere) Kamera, die sich an der Spitze des Frustums befindet. Ueber Tastatur und Maus wird die Kamera im Raum bewegt.

Nach einem 'Move' wird die Transformationsmatrix der Camera bezogen zum zum Ursprung berechnet um anschliessend die Weltobjekte in das Frustum zu transformieren.

Ausserdem erfolgt vor jedem Move eiene Kollisionsabfrage mit der umliegenden Objekten:

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. 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.


Member Enumeration Documentation

Enumerator:
STOP 
STEP_FORWARD 
STEP_BACKWARD 
STRAFE_LEFT 
STRAFE_RIGHT 
LIFT_UP 
LIFT_DOWN 
ROTATE_LEFT 
ROTATE_RIGHT 
LOOK_UP 
LOOK_DOWN 

Constructor & Destructor Documentation

Camera::Camera ( ) [protected]

Konstruktor.

Here is the call graph for this function:

Here is the caller graph for this function:

Camera::~Camera ( ) [virtual]

Destruktor - Speichert auch die aktuelle Kameraposition.

Here is the call graph for this function:


Member Function Documentation

void Camera::action ( )

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

Here is the call graph for this function:

Here is the caller graph for this function:

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

Testet auf eine Kollision.

Parameters:
typforward, backward, ...
dirBewegungsrichtung
Returns:
true-->Kollision, false-->keine Kollision

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::dump ( )

Dump-Methode fuer debuging.

Camera * Camera::getInstance ( ) [static]

Liefert die Singleton-Instanz.

Returns:
Pointer auf die Instanz

Here is the call graph for this function:

Here is the caller graph for this function:

float Camera::getLevel ( )

getLevel

Returns:
level

Here is the call graph for this function:

Here is the caller graph for this function:

int Camera::getZoneID ( )

Liefert die aktuelle Zonen-ID zurueck, in der sich die Camera befindet.

Returns:
zoneID

Here is the caller graph for this function:

void Camera::incMove ( )

Simulation der Pendelbewegung beim laufen: Beim laufen und beim gehen unterliegt der menschliche Koerper einer leichten Auf- und Abbewegung. Die daraus resultierende Kamerapendeln wird durch eine Sinusfunktion simuliert.

Here is the caller graph for this function:

Camera::STEP_DIR Camera::isLifting ( )

Getter fuer die auszufuehrende Hoch-/Runterbewegeung.

Returns:
STOP, STEP_UP, STEP_DOWN

Here is the caller graph for this function:

Camera::STEP_DIR Camera::isLooking ( )

Getter fuer die auszufuehrende Drehbewegung.

Returns:
STOP, ROTATE_LEFT, ROTATE_RIGHT

Here is the caller graph for this function:

Camera::STEP_DIR Camera::isMoving ( )

Getter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.

Returns:
STOP, STEP_FORWARD, STEP_BACKWARD

Here is the caller graph for this function:

Camera::STEP_DIR Camera::isRotating ( )

Getter fuer die auszufuehrende Drehbewegung.

Returns:
STOP, ROTATE_LEFT, ROTATE_RIGHT

Here is the caller graph for this function:

Camera::STEP_DIR Camera::isStrafing ( )

Getter fuer die auszufuehrende Seitwaertsbewegeung.

Returns:
STOP, STRAFE_LEFT, STRAFE_RIGHT

Here is the caller graph for this function:

void Camera::lift ( STEP_DIR  step)

Setter fuer die auszufuehrende Hoch-/Runterbewegeung.

Parameters:
stepSTOP, STEP_UP, STEP_DOWN

Here is the caller graph for this function:

void Camera::liftDown ( )

Ein Step nach Unten (ohne Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::liftUp ( )

Ein Step nach Oben (ohne Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::load ( DataInputStream dataIn)

Liest das Camera-Objekt aus dem Inputstream.

Parameters:
dataInDataInputStream

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::load ( void  )

Liest das Camera-Objekt aus dem Inputstream.

Here is the call graph for this function:

void Camera::look ( Camera::STEP_DIR  step)

Setter fuer die auszufuehrende Drehbewegung.

Parameters:
stepSTOP, ROTATE_LEFT, ROTATE_RIGHT

Here is the caller graph for this function:

void Camera::lookDown ( )

Nach unten blicken.

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::lookUp ( )

Nach oben blicken.

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::move ( STEP_DIR  step)

Setter fuer die auszufuehrende Vorwaerts-/Rueckwaertsbewegeung.

Parameters:
stepSTOP, STEP_FORWARD, STEP_BACKWARD

Here is the caller graph for this function:

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

Setter fuer die auszufuehrende Drehbewegung.

Parameters:
stepSTOP, ROTATE_LEFT, ROTATE_RIGHT

Here is the caller graph for this function:

void Camera::save ( DataOutputStream dataOut)

Serialisiert das Camera-Objekt in den Outputstream.

Parameters:
dataOutDataOutputStream
Exceptions:
IOException

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::save ( void  )

Liest das Camera-Objekt aus dem Inputstream.

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::setDir ( float  xw,
float  yw 
)
void Camera::setDir ( float  x,
float  y,
float  z 
)

Setter fuer die Bewegungsvektor der Camera im 3D Raum.

Parameters:
x
y
z

Here is the call graph for this function:

void Camera::setFrameRate ( float  fps)

Bei einer (angenommen) konstanten Framerate von 30 fps, liegt die konstante Rotationsgeschwindigkeit bei 2 Grad pro Frame.

Weil die tatsaechliche Framerate analog zur Komplexitaet der Szene schwankt, muss die Geschwindigkeit angepasst werden:

fps const v const * --------- = v x fps

Parameters:
fpsframes per second

Here is the call graph for this function:

Here is the caller graph for this function:

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

Setter fuer die Cameraposition im 3D Raum.

Parameters:
x
y
z

Here is the call graph for this function:

void Camera::setZoneID ( int  zoneID)

Setzt die ZoneID fuer die Camera.

Parameters:
zoneID

Here is the caller graph for this function:

void Camera::stepBackward ( )

Ein Step zurueck (inkl. Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::stepForward ( )

Ein Step nach vorne (inkl. Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::stepStrafeLeft ( )

Ein Step nach Links (inkl. Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::stepStrafeRight ( )

Ein Step nach Rechts (inkl. Kollisionserkennung)

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::stepTurnLeft ( )

Nach links drehen.

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::stepTurnRight ( )

Nach rechts drehen.

Here is the call graph for this function:

Here is the caller graph for this function:

void Camera::strafe ( STEP_DIR  step)

Setter fuer die auszufuehrende Seitwaertsbewegeung.

Parameters:
stepSTOP, STRAFE_LEFT, STRAFE_RIGHT

Here is the caller graph for this function:


Member Data Documentation

Camera * Camera::_instance = 0 [static, private]
int Camera::m_HOG [private]
int Camera::m_moverCount [private]
float Camera::m_moverDeltaY [private]
float Camera::m_step [private]
float Camera::m_stepAnim [private]
float Camera::m_stepColl [private]
int Camera::m_zoneID [private]

The documentation for this class was generated from the following files: