C++ / OpenCL Raytracer
metal.h
1 #ifndef METAL_H
2 #define METAL_H
3 
4 #include "material.h"
5 
7 class Metal : public Material {
8 public:
14  Metal(const Vector3D &a, double f) : m_vAlbedo(a) {
15  if (f < 1) { m_dFuzz = f; } // Shift ray scatter by dFuzz amount to blur reflection.
16  else { m_dFuzz = 1; } // If fuzz is disabled, do not alter reflection.
17  }
18  virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const {
19  Vector3D vReflected = Reflect(UnitVector(r_in.Direction()), rec.m_vNormal);
20  scattered = Ray(rec.m_vP, vReflected + m_dFuzz * RandomInUnitSphere());
21  attenuation = m_vAlbedo;
22  return (scattered.Direction().Dot(rec.m_vNormal) > 0);
23  }
24  virtual int MatType() const {
25  return 1;
26  }
27  virtual Vector3D MatColor() const {
28  return m_vAlbedo;
29  }
30  virtual double MatFuzz() const {
31  return m_dFuzz;
32  }
33  virtual double MatRef() const {
34  return 0;
35  }
37  double m_dFuzz;
38 };
39 #endif // METAL_H
virtual double MatFuzz() const
Definition: metal.h:30
virtual double MatRef() const
Definition: metal.h:33
double Dot(const Vector3D &v2)
Return dot product (double) of two Vector3D.
Definition: vector.h:60
Definition: object.h:19
static Vector3D Reflect(const Vector3D &v, const Vector3D &n)
Definition: material.h:52
Vector3D m_vAlbedo
Vector3D attenuation of light absorbed or reflected from object.
Definition: metal.h:36
Definition: material.h:9
virtual Vector3D MatColor() const
Definition: metal.h:27
double m_dFuzz
0.3 - 1.0 (double) value setting the randomness of reflections, thus blurring the metal surface.
Definition: metal.h:37
Definition: vector.h:16
Vector3D Direction() const
Returns Vector3D ending location of Ray.
Definition: ray.h:26
Vector3D m_vP
Vector3D location of intersection.
Definition: object.h:21
static Vector3D RandomInUnitSphere()
Definition: material.h:61
Definition: metal.h:7
virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const
Definition: metal.h:18
virtual int MatType() const
Definition: metal.h:24
Vector3D m_vNormal
Vector3D normal to point of intersection.
Definition: object.h:22
Definition: ray.h:7
Metal(const Vector3D &a, double f)
Definition: metal.h:14