#ifndef Manta_Model_MatrixCamera_h #define Manta_Model_MatrixCamera_h #include #include #include #include #include #include namespace Manta { using namespace std; class MatrixCamera : public Camera { public: MatrixCamera(const Vector& eye_, const Vector& lookat_, const Vector& up_ ); MatrixCamera(const vector& args); virtual ~MatrixCamera(); virtual void preprocess(const PreprocessContext& context); virtual void makeRays(RayPacket&) const; // Camera manipulation virtual void scaleFOV(Real); virtual void translate(Vector); virtual void dolly(Real); virtual void transform(AffineTransform t, TransformCenter); virtual void autoview(const BBox bbox); virtual void getBasicCameraData(BasicCameraData& cam) const; // This is not pass by reference because it needs to be used in a transaction virtual void setBasicCameraData(BasicCameraData cam); virtual void setMatrix(float incomingMatrix[16]); void setCameraNumber(long int lCameraNumber) { cameraNumber = lCameraNumber;}; long int getCameraNumber() const {return cameraNumber;}; static Camera* create(const vector& args); virtual Vector getPosition() const { return eye; } virtual Vector getLookAt() const { return lookat; }; virtual Vector getUp() const { return up; }; virtual void reset( const Vector& eye_, const Vector& up_, const Vector& lookat_ ); virtual void output( std::ostream& os ); private: void setup(); float minX; float minY; float maxX; float maxY; Vector eye; Vector lookat; Vector up; float inverseProjView[4][4]; Vector direction; Vector u, v, n; bool normalizeRays; bool haveCamera; long int cameraNumber; }; } #endif