Add preliminary support for material emissivity.

Not yet sure it work as I intended.
This commit is contained in:
Godzil
2020-02-22 15:14:09 +00:00
parent 935c8ebff7
commit 4d4c4a7453
2 changed files with 10 additions and 2 deletions

View File

@@ -26,13 +26,14 @@ public:
double shininess; double shininess;
double reflective; double reflective;
double transparency; double transparency;
double emissive;
double refractiveIndex; double refractiveIndex;
Pattern *pattern; Pattern *pattern;
public: public:
Material() : colour(Colour(1, 1, 1)), ambient(0.1), diffuse(0.9), specular(0.9), shininess(200), 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); 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->diffuse, b.diffuse) &&
double_equal(this->specular, b.specular) && double_equal(this->specular, b.specular) &&
double_equal(this->shininess, b.shininess) && 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); }; (this->colour == b.colour); };
}; };

View File

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