C++ / OpenCL Raytracer
dielectric.h
1 #ifndef DIELECTRIC_H
2 #define DIELECTRIC_H
3 
4 #include "material.h"
5 
7 class Dielectric : public Material {
8 public:
15  Dielectric(double ri) : m_dRefId(ri) {}
22  static bool Refract(const Vector3D &v, const Vector3D &n, double NiOverNt, Vector3D &refracted) {
23  Vector3D vUV = UnitVector(v);
24  double dDT = vUV.Dot(n);
25  double dDiscriminant = 1.0 - (NiOverNt * NiOverNt * (1 - dDT * dDT));
26  if (dDiscriminant > 0) {
27  refracted = NiOverNt * (vUV - (n * dDT)) - (n * sqrt(dDiscriminant));
28  return true;
29  }
30  else return false;
31  }
32 
33  virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const;
34  virtual int MatType() const {
35  return 2;
36  }
37  virtual Vector3D MatColor() const {
38  return Vector3D(0);
39  }
40  virtual double MatFuzz() const {
41  return 0;
42  }
43  virtual double MatRef() const {
44  return m_dRefId;
45  }
46  double m_dRefId;
47 };
48 #endif // DIELECTRIC_H
virtual double MatFuzz() const
Definition: dielectric.h:40
virtual bool Scatter(const Ray &r_in, const HitRecord &rec, Vector3D &attenuation, Ray &scattered) const
Definition: dielectric.cpp:3
Definition: dielectric.h:7
double Dot(const Vector3D &v2)
Return dot product (double) of two Vector3D.
Definition: vector.h:60
Definition: object.h:19
Dielectric(double ri)
Definition: dielectric.h:15
virtual double MatRef() const
Definition: dielectric.h:43
Definition: material.h:9
virtual int MatType() const
Definition: dielectric.h:34
Definition: vector.h:16
static bool Refract(const Vector3D &v, const Vector3D &n, double NiOverNt, Vector3D &refracted)
Definition: dielectric.h:22
double m_dRefId
Refractive index of Dielectric. Air = 1.0; Glass = 1.3 - 1.7; Diamond = 2.4.
Definition: dielectric.h:46
virtual Vector3D MatColor() const
Definition: dielectric.h:37
Definition: ray.h:7