diff --git a/main/Scene-load.cc b/main/Scene-load.cc index 1bd736c..ebb0353 100644 --- a/main/Scene-load.cc +++ b/main/Scene-load.cc @@ -198,6 +198,10 @@ void Scene::processOptions(refptr node) { m_max_depth = (*it)->getInteger(); } + else if ( typeid(**it) == typeid(AmbientNode) ) + { + setAmbientLight(Color((*it)->getVector())); + } } } diff --git a/main/Scene.cc b/main/Scene.cc index 13e336f..10888be 100644 --- a/main/Scene.cc +++ b/main/Scene.cc @@ -230,6 +230,7 @@ Color Scene::computePhong(const refptr material, Vector lightPlaneX = directionToLightC.getPerpendicular().normalize(); Vector lightPlaneY = (directionToLightC * lightPlaneX).normalize(); int jitter_samples = 0, jitter_level = (*it)->getJitter();; + Color jitterResult; for (int jitter_index = 0; jitter_index < jitter_level; jitter_index++) { double jitterRadius = jitter_index * lightRadius @@ -259,25 +260,26 @@ Color Scene::computePhong(const refptr material, double diffuse_coef = directionToLight % surfaceNormal; if (diffuse_coef > 0.0) { - result += diffuseColor - * (*it)->getDiffuseColor() - * diffuse_coef - * light_contribution; + jitterResult += diffuseColor + * (*it)->getDiffuseColor() + * diffuse_coef + * light_contribution; } /* calculate the specular term */ double specular_coef = reflectedLightDirection % viewDirection; if (specular_coef > 0.0) { - result += specularColor - * (*it)->getSpecularColor() - * pow(specular_coef, shininess) - * light_contribution; + jitterResult += specularColor + * (*it)->getSpecularColor() + * pow(specular_coef, shininess) + * light_contribution; } } } } - result /= jitter_samples; + jitterResult /= jitter_samples; + result += jitterResult; } return result; diff --git a/parser/parser.yy b/parser/parser.yy index 923038a..f0d58d8 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -311,6 +311,9 @@ options_item: WIDTH DEC_NUMBER { | EXPOSURE number { $$ = new ExposureNode($2->getNumber()); } + | AMBIENT vector { + $$ = new AmbientNode($2->getVector()); + } ; plane: PLANE LCURLY plane_items RCURLY { diff --git a/scenes/subtract-subtract.fart b/scenes/subtract-subtract.fart index e8304a7..60b7b44 100644 --- a/scenes/subtract-subtract.fart +++ b/scenes/subtract-subtract.fart @@ -4,6 +4,7 @@ scene options { multisample 3 + ambient <0.2, 0.2, 0.2> } camera