48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
|
|
#ifndef TRANSFORM_H
|
|
#define TRANSFORM_H TRANSFORM_H
|
|
|
|
#include "refptr.h"
|
|
#include "Matrix.h"
|
|
#include "Ray.h"
|
|
#include "Vector.h"
|
|
#include <stack>
|
|
|
|
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<Vector> vec)
|
|
{
|
|
translate((*vec)[0], (*vec)[1], (*vec)[2]);
|
|
}
|
|
void rotate(double angle, double xv, double yv, double zv);
|
|
void rotate(double angle, refptr<Vector> vec)
|
|
{
|
|
rotate(angle, (*vec)[0], (*vec)[1], (*vec)[2]);
|
|
}
|
|
void scale(double xs, double ys, double zs);
|
|
void scale(refptr<Vector> 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
|
|
|