00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __NECAMERA_H
00028 #define __NECAMERA_H
00029
00030
00037 #include "base.h"
00038 #include "scenenode.h"
00039
00040 #include <string>
00041
00042
00043 namespace NeoEngine
00044 {
00045
00046
00047
00048 class Room;
00049
00050
00055 class NEOENGINE_API Camera : public SceneNode
00056 {
00057
00058 public:
00059
00060 DefineVisitable();
00061
00062 protected:
00063
00065 Room *m_pkRoom;
00066
00068 static Camera *s_pkActiveCamera;
00069
00070
00071 public:
00072
00078 Camera( const std::string &rstrName, SceneNode *pkParent = 0 );
00079
00086 bool Render( Frustum *pkFrustum = 0, bool bForce = false );
00087
00093 void LookAt( const Vector3d &rkAt, const Vector3d &rkUp );
00094
00098 inline const Matrix &GetViewMatrix() { return GetInverseWorldTransform(); }
00099
00103 const Matrix &GetInverseViewMatrix() { return GetWorldTransform(); }
00104
00109 void SetRoom( Room *pkRoom );
00110
00114 Room *GetRoom() { return m_pkRoom; }
00115
00119 void SetActive() { s_pkActiveCamera = this; }
00120
00124 static Camera *GetActive() { return s_pkActiveCamera; }
00125 };
00126
00127
00128 }
00129
00130
00131 #endif