Add preliminary support for material emissivity.
Not yet sure it work as I intended.
This commit is contained in:
@@ -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); };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user