diff --git a/source/include/material.h b/source/include/material.h index 2faad50..85588d8 100644 --- a/source/include/material.h +++ b/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); }; }; diff --git a/source/shapes/material.cpp b/source/shapes/material.cpp index 3dbb30d..0be9070 100644 --- a/source/shapes/material.cpp +++ b/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); } \ No newline at end of file