00001 #ifndef PHOTON_H_ 00002 #define PHOTON_H_ 00003 00004 #include "../RGBColor.h" 00005 #include "../math/Point3D.h" 00006 #include "../math/Vec3D.h" 00007 #include "../primitives/Axis.hpp" 00008 00009 namespace rcrt 00010 { 00011 00012 enum ScatterEvent{ 00013 STORE, 00014 DIFFUSE, 00015 SPECULAR, 00016 REFRACTED, 00017 INVALID, 00018 }; 00019 00020 class Photon 00021 { 00022 private: 00023 RGBColor power; 00024 Vec3D direction; 00025 Point3D position; 00026 float weight; 00027 int bounces; 00028 00029 public: 00030 Photon(const float& w = 1); 00031 Photon(const RGBColor& pow, const Vec3D& dir, const Point3D& pos, const int& b = 0, const float& weight = 1); 00032 virtual ~Photon(); 00033 00034 inline void setWeight(const float& w) 00035 { 00036 weight = w; 00037 } 00038 00039 inline const float& getWeight() const 00040 { 00041 return weight; 00042 } 00043 00044 inline void setPos(const Point3D& pos) 00045 { 00046 position = pos; 00047 } 00048 00049 inline const Point3D& getPos() const 00050 { 00051 return position; 00052 } 00053 00054 inline void setPower(const RGBColor& pow) 00055 { 00056 power = pow; 00057 } 00058 00059 inline const RGBColor& getPower() const 00060 { 00061 return power; 00062 } 00063 00064 inline void scalePower(const RGBColor& fac) 00065 { 00066 power = power * fac; 00067 } 00068 00069 inline void scalePower(const float& fac) 00070 { 00071 power = power * fac; 00072 } 00073 00074 inline void setDir(const Vec3D& vec) 00075 { 00076 direction = vec; 00077 } 00078 00079 inline const Vec3D& getDir() const 00080 { 00081 return direction; 00082 } 00083 00084 inline void addBounce() 00085 { 00086 bounces++; 00087 } 00088 00089 inline const int& getBounces() 00090 { 00091 return bounces; 00092 } 00093 00094 inline void setBounces(const int& i) 00095 { 00096 bounces = i; 00097 } 00098 00099 }; 00100 00101 } 00102 00103 #endif /*PHOTON_H_*/