| [4592] | 1 | /*! | 
|---|
| [5005] | 2 |  * @file camera.h | 
|---|
 | 3 |  * Viewpoint controlling class definitions | 
|---|
| [4592] | 4 | */ | 
|---|
| [2068] | 5 |  | 
|---|
| [3224] | 6 | #ifndef _CAMERA_H | 
|---|
 | 7 | #define _CAMERA_H | 
|---|
| [2068] | 8 |  | 
|---|
| [3635] | 9 | #include "p_node.h" | 
|---|
| [4414] | 10 | #include "event_listener.h" | 
|---|
| [7009] | 11 | #include "plane.h" | 
|---|
| [2100] | 12 |  | 
|---|
| [2636] | 13 | class World; | 
|---|
| [3635] | 14 | class CameraTarget; | 
|---|
| [4414] | 15 | class Event; | 
|---|
| [2100] | 16 |  | 
|---|
| [4490] | 17 | //! an enumerator for different types of view | 
|---|
| [4592] | 18 | typedef enum ViewMode | 
|---|
 | 19 | { | 
|---|
 | 20 |   VIEW_NORMAL, | 
|---|
 | 21 |   VIEW_BEHIND, | 
|---|
 | 22 |   VIEW_FRONT, | 
|---|
 | 23 |   VIEW_LEFT, | 
|---|
 | 24 |   VIEW_RIGHT, | 
|---|
 | 25 |   VIEW_TOP | 
|---|
 | 26 | }; | 
|---|
| [3635] | 27 |  | 
|---|
| [2096] | 28 | //! Camera | 
|---|
 | 29 | /** | 
|---|
| [5005] | 30 |  * This class controls the viewpoint from which the World is rendered. | 
|---|
| [2096] | 31 | */ | 
|---|
| [4414] | 32 | class Camera : public PNode, public EventListener | 
|---|
| [3635] | 33 | { | 
|---|
 | 34 |  public: | 
|---|
| [4746] | 35 |   Camera(); | 
|---|
 | 36 |   virtual ~Camera(); | 
|---|
| [3635] | 37 |  | 
|---|
 | 38 |   void lookAt(PNode* target); | 
|---|
| [7014] | 39 |   CameraTarget* getTarget() const { return this->target; }; | 
|---|
 | 40 |   PNode* getTargetNode() const; | 
|---|
| [3636] | 41 |  | 
|---|
 | 42 |   void setAspectRatio(float aspectRatio); | 
|---|
 | 43 |   void setFovy(float fovy); | 
|---|
 | 44 |   void setClipRegion(float nearClip, float farClip); | 
|---|
 | 45 |  | 
|---|
| [3639] | 46 |   void setViewMode(ViewMode mode); | 
|---|
| [7009] | 47 |   inline const Vector& getViewVector() const { return this->viewVector; } | 
|---|
 | 48 |   inline const Vector& getUpVector() const { return this->upVector; } | 
|---|
 | 49 |   inline const Plane& getViewFrustum() const { return this->frustumPlane; } | 
|---|
 | 50 |  | 
|---|
| [7013] | 51 |   inline float distance(const Vector& distance) const { return this->frustumPlane.distancePoint(distance); } | 
|---|
 | 52 |   inline float distance(const PNode* node) const { return distance(node->getAbsCoor()); } | 
|---|
| [7009] | 53 |  | 
|---|
| [3639] | 54 |   void tick(float dt); | 
|---|
| [4746] | 55 |   void apply (); | 
|---|
| [4414] | 56 |  | 
|---|
 | 57 |   void process(const Event &event); | 
|---|
| [4490] | 58 |  | 
|---|
 | 59 |  private: | 
|---|
 | 60 |   CameraTarget*     target;          //!< The Target of the Camera (where this Camera Looks at) | 
|---|
 | 61 |  | 
|---|
 | 62 |   float             fovy;            //!< The field of view Angle (in degrees). | 
|---|
 | 63 |   float             aspectRatio;     //!< The aspect ratio (width / height). | 
|---|
 | 64 |   float             nearClip;        //!< The near clipping plane. | 
|---|
 | 65 |   float             farClip;         //!< The far clipping plane. | 
|---|
 | 66 |  | 
|---|
| [4986] | 67 |   float             toFovy;          //!< The fovy-mode to iterate to. | 
|---|
| [6034] | 68 |   ViewMode          currentMode;     //!< The ViewMode the camera is in | 
|---|
| [6999] | 69 |  | 
|---|
 | 70 |   Vector            delay; | 
|---|
| [7009] | 71 |   Plane             frustumPlane;    //!< plane that marks the view frustum | 
|---|
 | 72 |   Vector            viewVector;      //!< the direction of the camera view | 
|---|
 | 73 |   Vector            upVector;        //!< direction of the up vector | 
|---|
| [3635] | 74 | }; | 
|---|
| [2068] | 75 |  | 
|---|
| [3635] | 76 | //! A CameraTarget is where the Camera is looking at. | 
|---|
| [4592] | 77 | class CameraTarget : public PNode | 
|---|
| [3635] | 78 | { | 
|---|
| [3636] | 79 |   friend class Camera;             //! The CameraTarget is a friend of Camera. noone else needs a CameraTarget, so noone else can create it. | 
|---|
| [4592] | 80 |  | 
|---|
| [3635] | 81 |  private: | 
|---|
| [4746] | 82 |   CameraTarget(); | 
|---|
| [4592] | 83 |  | 
|---|
| [2068] | 84 |  public: | 
|---|
| [3635] | 85 | }; | 
|---|
| [2068] | 86 |  | 
|---|
 | 87 |  | 
|---|
| [3224] | 88 | #endif /* _CAMERA_H */ | 
|---|