00001 #ifndef PERSPECTIVECAMERA_H_
00002 #define PERSPECTIVECAMERA_H_
00003
00004 #include "Camera.h"
00005
00006 namespace rcrt
00007 {
00008
00012 class PerspectiveCamera : public rcrt::Camera
00013 {
00014 private:
00015 float vangle;
00016 Point3D pos;
00017 Vec3D dir, up;
00018 bool init;
00019
00020 float focus;
00021 Vec3D xAxis, yAxis, zAxis;
00022 float aspect;
00023
00024 public:
00025 PerspectiveCamera();
00026 PerspectiveCamera(float angle, const Point3D& p, const Vec3D& d, const Vec3D& u, const int& resX, const int& resY);
00027 virtual ~PerspectiveCamera();
00028
00029 void initialise(float angle, const Point3D& p, const Vec3D& d, const Vec3D& u, const int& resX, const int& resY);
00030 void update(const Point3D& p, const Vec3D& d, const Vec3D& u);
00031 virtual Ray getRay(const Point2D& px) const;
00032 virtual void setResolution(const int& resX, const int& resY);
00033 virtual void setAngle(const float& angle);
00034 virtual const Vec3D& getDirection();
00035 virtual const Vec3D& getXAxis();
00036 virtual const Vec3D& getUp();
00037 virtual const Point3D& getPosition();
00038 virtual const float getAngle();
00039 virtual const float& getFocus();
00040 };
00041
00042 }
00043
00044 #endif