C++ / OpenCL Raytracer
material.h
1 #ifndef MATERIAL_H
2 #define MATERIAL_H
3 
4 struct HitRecord;
5 
6 #include "object.h"
7 
9 class Material {
10 public:
17  virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const = 0;
24  virtual int MatType() const = 0;
31  virtual Vector3D MatColor() const = 0;
38  virtual double MatFuzz() const = 0;
45  virtual double MatRef() const = 0;
52  static Vector3D Reflect(const Vector3D &v, const Vector3D &n) {
53  return v - 2 * StdDot(v, n)*n;
54  }
62  Vector3D m_vP;
63  do {
64  m_vP = 2.0*Vector3D(drand48(), drand48(), drand48()) - Vector3D(1);
65  } while (m_vP.SquaredLength() >= 1.0);
66  return m_vP;
67  }
68 };
69 #endif // MATERIAL_H
virtual double MatFuzz() const =0
virtual double MatRef() const =0
Definition: object.h:19
static Vector3D Reflect(const Vector3D &v, const Vector3D &n)
Definition: material.h:52
virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const =0
Definition: material.h:9
virtual int MatType() const =0
Definition: vector.h:16
static Vector3D RandomInUnitSphere()
Definition: material.h:61
double SquaredLength() const
Return squared length (double) of Vector3D.
Definition: vector.h:59
virtual Vector3D MatColor() const =0
Definition: ray.h:7