00001 00005 #ifndef Triangle_h 00006 #define Triangle_h 00007 00008 #include "Vector.h" 00009 #include "Primitive.h" 00010 class HitRecord; 00011 class Point; 00012 class RenderContext; 00013 00017 class Triangle : public Primitive { 00018 public: 00019 Triangle(Material* material, const Point &A, const Point &B, const Point &C); 00020 virtual ~Triangle(); 00021 00022 virtual void getBounds(BoundingBox& bbox) const; 00023 virtual void intersect(HitRecord& hit, const RenderContext& context, const Ray& ray) const; 00024 virtual void normal(Vector& normal, const RenderContext& context, 00025 const Point & hitpos, const Ray& ray, const HitRecord& hit) const; 00026 00027 private: 00028 Triangle(const Triangle&); 00029 Triangle& operator=(const Triangle&); 00030 00031 Point a, b, c; 00032 Vector ab; 00033 Vector ac; 00034 Vector n; 00035 double d; 00036 int i1, i2; 00037 }; 00038 00039 #endif 00040