#ifndef ENTITY_H #define ENTITY_H #include #include #include using std::vector; using std::queue; using std::pair; #include "ray.h" #include "ray_intersect.h" #include "lin_alg.h" #include "transform.h" #include "color.h" struct Entity; struct EntityWrap { bool operator < (EntityWrap e) const { if(E < e.E) return true; if(E > e.E) return false; return special < e.special; } Entity* E; int special; }; struct EntityWrapBound { Entity* E; int special; vector3d hi, lo; }; class Entity { public: virtual ~Entity() {} virtual RayIntersect CalcRayIntersect(Ray ray, int special=-1) = 0; virtual vector3d CalcNormal(Ray ray, RayIntersect& ri) = 0; virtual void PathCompress(const Transform&, queue >&, vector&)=0; virtual void GridCollect(vector& vec)=0; virtual int IntersectionTest(Ray ray, int special=-1)=0; float kd, ks, ka, n; Color col; }; #endif