C++ / OpenCL Raytracer
lambertian.h
1 #ifndef LAMBERTIAN_H
2 #define LAMBERTIAN_H
3 
4 #include "material.h"
5 
7 class Lambertian : public Material {
8 public:
15  Lambertian(const Vector3D& a) : m_vAlbedo(a) {}
16  virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const {
17  Vector3D vTarget = rec.m_vP + rec.m_vNormal + RandomInUnitSphere();
18  scattered = Ray(rec.m_vP, vTarget - rec.m_vP);
19  attenuation = m_vAlbedo;
20  return true;
21  }
22  virtual int MatType() const {
23  return 0;
24  }
25  virtual Vector3D MatColor() const {
26  return m_vAlbedo;
27  }
28  virtual double MatFuzz() const {
29  return 0;
30  }
31  virtual double MatRef() const {
32  return 0;
33  }
35 };
36 #endif // LAMBERTIAN_H
virtual double MatRef() const
Definition: lambertian.h:31
virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const
Definition: lambertian.h:16
virtual Vector3D MatColor() const
Definition: lambertian.h:25
virtual double MatFuzz() const
Definition: lambertian.h:28
Definition: object.h:19
Lambertian(const Vector3D &a)
Definition: lambertian.h:15
Definition: material.h:9
Definition: vector.h:16
Definition: lambertian.h:7
Vector3D m_vP
Vector3D location of intersection.
Definition: object.h:21
static Vector3D RandomInUnitSphere()
Definition: material.h:61
virtual int MatType() const
Definition: lambertian.h:22
Vector3D m_vAlbedo
Vector3D attenuation of light absorbed or reflected from Object.
Definition: lambertian.h:34
Vector3D m_vNormal
Vector3D normal to point of intersection.
Definition: object.h:22
Definition: ray.h:7