Added WIP Phong implementation
This commit is contained in:
parent
9dcbefe5a5
commit
4e3843a2fc
1 changed files with 16 additions and 5 deletions
|
@ -4,13 +4,24 @@
|
||||||
|
|
||||||
PhongShader::PhongShader(Color const &diffuseColor, float diffuseCoefficient, Color const &specularColor,
|
PhongShader::PhongShader(Color const &diffuseColor, float diffuseCoefficient, Color const &specularColor,
|
||||||
float specularCoefficient, float shininessExponent)
|
float specularCoefficient, float shininessExponent)
|
||||||
: diffuseColor(diffuseColor), diffuseCoefficient(diffuseCoefficient), specularColor(specularColor),
|
: diffuseColor(diffuseColor), diffuseCoefficient(diffuseCoefficient), specularColor(specularColor),
|
||||||
specularCoefficient(specularCoefficient), shininessExponent(shininessExponent) {}
|
specularCoefficient(specularCoefficient), shininessExponent(shininessExponent) {}
|
||||||
|
|
||||||
Color PhongShader::shade(Scene const &scene, Ray const &ray) const {
|
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue