| [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 |  | 
|---|
| [3635] | 17 |  | 
|---|
| [2096] | 18 | //! Camera | 
|---|
|  | 19 | /** | 
|---|
| [5005] | 20 | * This class controls the viewpoint from which the World is rendered. | 
|---|
| [2096] | 21 | */ | 
|---|
| [4414] | 22 | class Camera : public PNode, public EventListener | 
|---|
| [3635] | 23 | { | 
|---|
| [7347] | 24 | public: | 
|---|
|  | 25 | //! an enumerator for different types of view | 
|---|
|  | 26 | typedef enum ViewMode | 
|---|
|  | 27 | { | 
|---|
|  | 28 | ViewNormal, | 
|---|
|  | 29 | ViewBehind, | 
|---|
|  | 30 | ViewFront, | 
|---|
|  | 31 | ViewLeft, | 
|---|
|  | 32 | ViewRight, | 
|---|
|  | 33 | ViewTop | 
|---|
|  | 34 | }; | 
|---|
|  | 35 |  | 
|---|
| [4746] | 36 | Camera(); | 
|---|
|  | 37 | virtual ~Camera(); | 
|---|
| [3635] | 38 |  | 
|---|
|  | 39 | void lookAt(PNode* target); | 
|---|
| [7014] | 40 | CameraTarget* getTarget() const { return this->target; }; | 
|---|
|  | 41 | PNode* getTargetNode() const; | 
|---|
| [3636] | 42 |  | 
|---|
|  | 43 | void setAspectRatio(float aspectRatio); | 
|---|
|  | 44 | void setClipRegion(float nearClip, float farClip); | 
|---|
|  | 45 |  | 
|---|
| [7173] | 46 | /** @param fovy new field of view factor (in degrees) */ | 
|---|
|  | 47 | void setFovy(float fovy) { this->fovy = fovy; }; | 
|---|
|  | 48 | /** @param fovy new field of view factor (in degrees) to iterate to */ | 
|---|
|  | 49 | void setToFovy(float toFovy) { this->toFovy = toFovy; }; | 
|---|
|  | 50 |  | 
|---|
| [7347] | 51 | void setViewMode(Camera::ViewMode mode); | 
|---|
| [7009] | 52 | inline const Vector& getViewVector() const { return this->viewVector; } | 
|---|
|  | 53 | inline const Vector& getUpVector() const { return this->upVector; } | 
|---|
|  | 54 | inline const Plane& getViewFrustum() const { return this->frustumPlane; } | 
|---|
|  | 55 |  | 
|---|
| [7013] | 56 | inline float distance(const Vector& distance) const { return this->frustumPlane.distancePoint(distance); } | 
|---|
|  | 57 | inline float distance(const PNode* node) const { return distance(node->getAbsCoor()); } | 
|---|
| [7009] | 58 |  | 
|---|
| [3639] | 59 | void tick(float dt); | 
|---|
| [4746] | 60 | void apply (); | 
|---|
| [7108] | 61 | void project(); | 
|---|
| [4414] | 62 |  | 
|---|
|  | 63 | void process(const Event &event); | 
|---|
| [4490] | 64 |  | 
|---|
| [7347] | 65 | private: | 
|---|
| [4490] | 66 | CameraTarget*     target;          //!< The Target of the Camera (where this Camera Looks at) | 
|---|
|  | 67 |  | 
|---|
|  | 68 | float             fovy;            //!< The field of view Angle (in degrees). | 
|---|
|  | 69 | float             aspectRatio;     //!< The aspect ratio (width / height). | 
|---|
|  | 70 | float             nearClip;        //!< The near clipping plane. | 
|---|
|  | 71 | float             farClip;         //!< The far clipping plane. | 
|---|
|  | 72 |  | 
|---|
| [4986] | 73 | float             toFovy;          //!< The fovy-mode to iterate to. | 
|---|
| [7347] | 74 | Camera::ViewMode  currentMode;     //!< The ViewMode the camera is in | 
|---|
| [6999] | 75 |  | 
|---|
|  | 76 | Vector            delay; | 
|---|
| [7009] | 77 | Plane             frustumPlane;    //!< plane that marks the view frustum | 
|---|
|  | 78 | Vector            viewVector;      //!< the direction of the camera view | 
|---|
|  | 79 | Vector            upVector;        //!< direction of the up vector | 
|---|
| [3635] | 80 | }; | 
|---|
| [2068] | 81 |  | 
|---|
| [3635] | 82 | //! A CameraTarget is where the Camera is looking at. | 
|---|
| [4592] | 83 | class CameraTarget : public PNode | 
|---|
| [3635] | 84 | { | 
|---|
| [3636] | 85 | friend class Camera;             //! The CameraTarget is a friend of Camera. noone else needs a CameraTarget, so noone else can create it. | 
|---|
| [4592] | 86 |  | 
|---|
| [7347] | 87 | private: | 
|---|
| [4746] | 88 | CameraTarget(); | 
|---|
| [4592] | 89 |  | 
|---|
| [7347] | 90 | public: | 
|---|
| [3635] | 91 | }; | 
|---|
| [2068] | 92 |  | 
|---|
|  | 93 |  | 
|---|
| [3224] | 94 | #endif /* _CAMERA_H */ | 
|---|