#ifndef TRANSFORM_H #define TRANSFORM_H TRANSFORM_H #include "refptr.h" #include "Matrix.h" #include "Ray.h" #include "Vector.h" #include class Transform { public: Transform(); Transform getInverse(); void lookAt(const Vector & eye, const Vector & focus, const Vector & up); void translate(double x, double y, double z); void translate(refptr vec) { translate((*vec)[0], (*vec)[1], (*vec)[2]); } void rotate(double angle, double xv, double yv, double zv); void rotate(double angle, refptr vec) { rotate(angle, (*vec)[0], (*vec)[1], (*vec)[2]); } void scale(double xs, double ys, double zs); void scale(refptr vec) { scale((*vec)[0], (*vec)[1], (*vec)[2]); } Matrix & getMatrix() { return m_matrix; } Vector transform_point(const Vector & v); Vector transform_direction(const Vector & v); Vector transform_normal(const Vector & v); Ray transform_ray(const Ray & r); Transform operator*(const Transform & other) const; protected: Matrix m_matrix; }; #endif