00001 00005 #include "Plane.h" 00006 #include "HitRecord.h" 00007 #include "Math.h" 00008 #include "Ray.h" 00009 #include <iostream> 00010 #include <stdlib.h> 00011 using namespace std; 00012 00013 Plane::Plane(Material* material, const Vector& normal, const Point& point) 00014 : Primitive(material), n(normal) 00015 { 00016 n.normalize(); 00017 d = Dot(n, point); 00018 } 00019 00020 Plane::~Plane() 00021 { 00022 } 00023 00024 void Plane::intersect(HitRecord& hit, const RenderContext& context, const Ray& ray) const 00025 { 00026 double denom = Dot(n, ray.direction()); 00027 if(Abs(denom) > 1.e-6){ 00028 double t = (d-Dot(n, ray.origin()))/denom; 00029 hit.hit(t, this, matl); 00030 } 00031 } 00032 00033 void Plane::normal(Vector& normal, const RenderContext&, 00034 const Point&, const Ray&, const HitRecord&) const 00035 { 00036 normal = n; 00037 } 00038 00039 void Plane::getBounds(BoundingBox& bbox) const 00040 { 00041 cerr << "Plane::getBounds() called!" << endl; 00042 exit( 1 ); 00043 } 00044