Browse Source

Add preliminary support for material emissivity.

Not yet sure it work as I intended.
Godzil 4 years ago
parent
commit
4d4c4a7453
2 changed files with 10 additions and 2 deletions
  1. 6 1
      source/include/material.h
  2. 4 1
      source/shapes/material.cpp

+ 6 - 1
source/include/material.h

@@ -26,13 +26,14 @@ public:
     double shininess;
     double reflective;
     double transparency;
+    double emissive;
     double refractiveIndex;
 
     Pattern *pattern;
 
 public:
     Material() : colour(Colour(1, 1, 1)), ambient(0.1), diffuse(0.9), specular(0.9), shininess(200),
-           reflective(0.0), transparency(0.0), refractiveIndex(1.0), pattern(nullptr) {};
+           reflective(0.0), transparency(0.0), emissive(0), refractiveIndex(1.0), pattern(nullptr) {};
 
     Colour lighting(Light light, Tuple point, Tuple eyeVector, Tuple normalVector, Shape *hitObject, bool inShadow = false);
 
@@ -40,6 +41,10 @@ public:
                                                       double_equal(this->diffuse,   b.diffuse) &&
                                                       double_equal(this->specular,  b.specular) &&
                                                       double_equal(this->shininess, b.shininess) &&
+                                                      double_equal(this->reflective, b.reflective) &&
+                                                      double_equal(this->transparency, b.transparency) &&
+                                                      double_equal(this->emissive, b.emissive) &&
+                                                      double_equal(this->refractiveIndex, b.refractiveIndex) &&
                                                       (this->colour == b.colour); };
 };
 

+ 4 - 1
source/shapes/material.cpp

@@ -25,6 +25,7 @@ Colour Material::lighting(Light light, Tuple point, Tuple eyeVector, Tuple norma
 
     Tuple effectiveColour = pointColor * light.intensity;
     Tuple ambientColour = Colour(0, 0, 0);
+    Tuple emissiveColour = Colour(0, 0, 0);
     Tuple diffuseColour = Colour(0, 0, 0);
     Tuple specularColour = Colour(0, 0, 0);
     Tuple finalColour = Colour(0, 0, 0);
@@ -33,6 +34,8 @@ Colour Material::lighting(Light light, Tuple point, Tuple eyeVector, Tuple norma
 
     ambientColour = effectiveColour * this->ambient;
 
+    emissiveColour = pointColor * this->emissive;
+
     if (!inShadow)
     {
         lightDotNormal = lightVector.dot(normalVector);
@@ -60,7 +63,7 @@ Colour Material::lighting(Light light, Tuple point, Tuple eyeVector, Tuple norma
             }
         }
     }
-    finalColour = ambientColour + diffuseColour + specularColour;
+    finalColour = emissiveColour + ambientColour + diffuseColour + specularColour;
 
     return Colour(finalColour.x, finalColour.y, finalColour.z);
 }