50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
|
|
#ifndef SHAPE_H
|
|
#define SHAPE_H SHAPE_H
|
|
|
|
#include "util/Solver.h"
|
|
#include "util/Ray.h"
|
|
#include "util/Vector.h"
|
|
#include "util/Transform.h"
|
|
#include "util/Material.h"
|
|
#include "util/refptr.h"
|
|
#include <vector>
|
|
|
|
class Shape
|
|
{
|
|
public:
|
|
typedef std::vector<Vector> IntersectList;
|
|
|
|
Shape();
|
|
virtual ~Shape();
|
|
virtual IntersectList intersect(const Ray & ray) = 0;
|
|
virtual Vector getNormalAt(const Vector & pt) = 0;
|
|
|
|
void setTransform(Transform & t)
|
|
{
|
|
m_transform = t;
|
|
m_inverse = t.getInverse();
|
|
}
|
|
Transform & getTransform() { return m_transform; }
|
|
|
|
void setTransparency(double t) { m_transparency = t; }
|
|
double getTransparency() const { return m_transparency; }
|
|
|
|
void setMaterial(refptr<Material> material) { m_material = material; }
|
|
refptr<Material> getMaterial() const { return m_material; }
|
|
|
|
protected:
|
|
Transform m_transform;
|
|
Transform m_inverse;
|
|
double m_transparency;
|
|
refptr<Material> m_material;
|
|
};
|
|
|
|
#include "Box.h"
|
|
#include "Cyl.h"
|
|
#include "Plane.h"
|
|
#include "Sphere.h"
|
|
|
|
#endif
|
|
|