00001
00002 #ifndef __matter_hpp__
00003 #define __matter_hpp__
00004
00005 #include <crbn/basic/vec3.hpp>
00006 #include <crbn/basic/trihedron.hpp>
00007
00022 class Matter
00023 {
00024 public:
00025
00026
00027 Matter() : _ok ( false ),
00028 _is_specular ( false ),
00029 _index ( 1.0f ),
00030 _absortion ( 1.0f ) {}
00031
00032 Matter(const bool& ok,
00033 const bool& is_specular = false,
00034 const bool& index = 1.0f,
00035 const bool& absortion = 1.0f ) :
00036 _ok ( ok ),
00037 _is_specular ( is_specular ),
00038 _index ( index ),
00039 _absortion ( absortion ) {}
00040
00041
00042 virtual ~Matter() {}
00043
00044 bool is_ok () { return _ok; }
00045 bool is_specular () { return _is_specular; }
00046
00047 virtual float specular() const = 0;
00048
00049 float index () const { return _index; }
00050 float absortion () const { return _absortion; }
00051
00052 virtual float eval( trihedron& tri, vec3& in, vec3& out ) = 0;
00053
00058 virtual int sample( trihedron& tri, vec3& in, int number, vec3* outs );
00059
00060 protected:
00061 bool _ok;
00062 bool _is_specular;
00063 float _index;
00064 float _absortion;
00065 };
00066
00067 #endif // __matter_hpp__