Added WIP Phong implementation

This commit is contained in:
arvid schröder 2022-11-28 20:24:29 +01:00
parent 9dcbefe5a5
commit 4e3843a2fc

View file

@ -4,13 +4,24 @@
PhongShader::PhongShader(Color const &diffuseColor, float diffuseCoefficient, Color const &specularColor,
float specularCoefficient, float shininessExponent)
: diffuseColor(diffuseColor), diffuseCoefficient(diffuseCoefficient), specularColor(specularColor),
specularCoefficient(specularCoefficient), shininessExponent(shininessExponent) {}
: diffuseColor(diffuseColor), diffuseCoefficient(diffuseCoefficient), specularColor(specularColor),
specularCoefficient(specularCoefficient), shininessExponent(shininessExponent) {}
Color PhongShader::shade(Scene const &scene, Ray const &ray) const {
Color fragmentColor;
Color fragmentColor;
// IMPLEMENT ME
return fragmentColor;
for (auto &light: scene.lights()) {
auto illum = light->illuminate(scene, ray);
auto omegaI = normalized(illum.direction);
auto omegaR = 2 * dotProduct(omegaI, ray.normal) * ray.normal - omegaI;
auto cosPsi = dotProduct(ray.direction, omegaR);
auto colorI = diffuseCoefficient * diffuseColor / PI +
(specularCoefficient * specularColor * std::pow(cosPsi, shininessExponent));
fragmentColor += illum.color * colorI;
}
return fragmentColor;
}