renderable.h

Go to the documentation of this file.
00001 #ifndef PRIMITIVE_H
00002 #define PRIMITIVE_H
00003 
00004 #include "raytrace_defs.h"
00005 #include "material.h"
00006 #include "bumpmap.h"
00007 #include "ray.h"
00008 #include "xml_util.h"
00009 
00011 class Renderable {
00012     public:
00013         virtual ~Renderable() {}
00014 
00020         virtual bool collides_with(const Ray &ray, double &t) const = 0;
00021 
00023         virtual Magick::Color get_color(const Point3D& intersection_point) const ;
00024 
00026         virtual double get_diffuse(const Point3D& intersection_point) const;
00027 
00029         virtual double get_reflection(const Point3D& intersection_point) const;
00030 
00032         virtual double get_specular(const Point3D& intersection_point) const ;
00033 
00035         virtual double get_reflectivity(const Point3D& intersection_point) const ;
00036 
00038         virtual double get_opacity(const Point3D& intersection_point) const ;
00039 
00041         virtual double get_refraction_index(const Point3D& intersection_point) const ;
00042 
00044         virtual bool is_light(const Point3D& intersection_point) const ;
00045 
00046         virtual bool set_is_light(bool ) ;
00047 
00050         virtual Ray get_normal(const Point3D &p) const = 0;
00051 
00054         bool initialize(xmlNode * node);
00055 
00056 
00071         virtual Magick::Color get_color_contribution(const Point3D &intersection_point, const Ray &ray, Vector &reflect, Vector &refract) ;
00072 
00073         bool is_in_shadow(const Ray &ray_to_light, const Point3D intersection_point) {
00074             double dist = INF;
00075             Renderable * prim = NULL;
00076             Scene * scene = Scene::get_instance();
00077 
00078             prim = scene->find_collision(ray_to_light, dist);
00079 
00080             if ( this == prim ) {
00081                 return false;
00082             }
00083 
00084             return (prim != NULL && !prim->is_light(intersection_point));
00085         }
00086 
00089         virtual const Point3D get_center() const
00090         {
00091             return m_center;
00092         }
00093 
00094     protected:
00099         Material * m_material ;
00100 
00106         Point3D m_center;
00107 
00112 
00113         BumpMap * m_bumpmap;
00114 
00117         
00118         bool m_center_material;
00119     private:
00122         Ray get_final_normal(const Point3D &p) ;
00123 };
00124 
00125 #endif

Generated on Tue Oct 30 22:12:15 2007 for mbrt by  doxygen 1.5.2