Ray Tracer Common Project
Image rendering program based on the ray tracing technique.
material.hpp
1 
15 #pragma once
16 
17 #include "core/color.hpp"
18 #include "core/vector.hpp"
19 #include "physics/photon.hpp"
20 #include <list>
21 
22 
23 namespace rt{
24 
25 class element;
26 class Texture;
27 class TextureMap;
28 
39 class Material{
40 public:
45  Material(const color & diffuse, double reflexion = 0.0, const photon & emission = photon(), const vector & disturbance = vector(0.0, 0.0, 1.0));
46  ~Material();
47 
52  virtual color diffuse(const element & e, const photon & external_light) const;
53 
54  virtual double reflexion(const element & e, const photon & external_light) const;
55 
56  virtual photon emission(const element & e, const photon & external_light) const;
57 
58  virtual vector disturbance(const element & e, const photon & external_light) const;
63  static Material *defaultMaterial();
64 
65 protected:
66  color _diffuse;
67  double _reflexion;
68  photon _emission;
69  vector _disturbance;
70 
71 private:
72  static Material *_default_material;
73 };
74 
75 }
76 
Object material.
Definition: material.hpp:39
Definition: bitmap.cpp:4
RGBA color representation.
Definition: color.hpp:31
static Material * defaultMaterial()
The default material.
Definition: material.cpp:20
virtual color diffuse(const element &e, const photon &external_light) const
Get the diffuse color of a surface element.
Definition: material.cpp:24
3D vector
Definition: vector.hpp:28
Material(const color &diffuse, double reflexion=0.0, const photon &emission=photon(), const vector &disturbance=vector(0.0, 0.0, 1.0))
Make a new material.
Definition: material.cpp:9
Geometric surface element unit.
Definition: element.hpp:43
Light photon class.
Definition: photon.hpp:28