Path Tracer
Material.h
Go to the documentation of this file.
1 #ifndef DEF_MATERIAL
2 #define DEF_MATERIAL
3 
4 #include "Ray.h"
5 
77 class Material {
78 private:
79  DoubleVec3D emittance;
80 
81 public:
82  Material(DoubleVec3D emittance = 0);
83  Material(const Material& material);
84 
85  DoubleVec3D getEmittance() const;
86  void setEmittance(DoubleVec3D emittance);
87 
88  virtual Material* deepCopy() const = 0;
89 
90  virtual DoubleUnitVec3D getNewDirection(const Ray& previousRay, const DoubleUnitVec3D& normal) const = 0;
91  virtual DoubleVec3D computeCurrentRadiance(const DoubleVec3D& recursiveRadiance, double cosAngleNewDirectionNormal, bool nextEventEstimation = false) const = 0;
92  virtual bool worksWithNextEventEstimation() const = 0;
93 
94  virtual std::ostream& getDescription(std::ostream& stream) const = 0;
95  virtual std::string getType() const = 0;
96  virtual json getSpecificParametersJson() const = 0;
97  virtual void setSpecificParametersJson(const json& j) = 0;
98 };
99 
100 std::ostream& operator<<(std::ostream& stream, const Material& material);
101 
102 #endif
nlohmann::json json
Definition: InterfaceGestion.h:14
std::ostream & operator<<(std::ostream &stream, const Material &material)
Ostream operator.
Definition: Material.cpp:17
Defines the Ray class.
A three-dimensional unit vector using doubles.
Definition: DoubleUnitVec3D.h:61
A three-dimensional vector using double values.
Definition: DoubleVec3D.h:190
Abstrat class that models a material.
Definition: Material.h:77
virtual void setSpecificParametersJson(const json &j)=0
Sets this material's specific parameters according to json.
void setEmittance(DoubleVec3D emittance)
Setter for the emittance attribute.
Definition: Material.cpp:13
virtual std::ostream & getDescription(std::ostream &stream) const =0
Returns this material's description.
Material(DoubleVec3D emittance=0)
Default and main constructor.
Definition: Material.cpp:4
virtual json getSpecificParametersJson() const =0
Converts this material's specific parameters to json.
virtual DoubleUnitVec3D getNewDirection(const Ray &previousRay, const DoubleUnitVec3D &normal) const =0
Computes the new ray direction.
virtual DoubleVec3D computeCurrentRadiance(const DoubleVec3D &recursiveRadiance, double cosAngleNewDirectionNormal, bool nextEventEstimation=false) const =0
Computes the new radiance.
virtual bool worksWithNextEventEstimation() const =0
Returns whether this material works with next event estimation.
virtual std::string getType() const =0
Returns this material type.
DoubleVec3D getEmittance() const
Getter for the emittance attribute.
Definition: Material.cpp:12
virtual Material * deepCopy() const =0
Makes a deep copy of this material.
Combination of an origin and a direction.
Definition: Ray.h:44