added ambient parameter in global options{} for parser to set scene's global ambient color

git-svn-id: svn://anubis/fart/trunk@260 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2010-06-29 15:39:35 +00:00
parent 70a5ef74d4
commit c115dec69b
4 changed files with 19 additions and 9 deletions

View File

@ -198,6 +198,10 @@ void Scene::processOptions(refptr<Node> node)
{ {
m_max_depth = (*it)->getInteger(); m_max_depth = (*it)->getInteger();
} }
else if ( typeid(**it) == typeid(AmbientNode) )
{
setAmbientLight(Color((*it)->getVector()));
}
} }
} }

View File

@ -230,6 +230,7 @@ Color Scene::computePhong(const refptr<Material> material,
Vector lightPlaneX = directionToLightC.getPerpendicular().normalize(); Vector lightPlaneX = directionToLightC.getPerpendicular().normalize();
Vector lightPlaneY = (directionToLightC * lightPlaneX).normalize(); Vector lightPlaneY = (directionToLightC * lightPlaneX).normalize();
int jitter_samples = 0, jitter_level = (*it)->getJitter();; int jitter_samples = 0, jitter_level = (*it)->getJitter();;
Color jitterResult;
for (int jitter_index = 0; jitter_index < jitter_level; jitter_index++) for (int jitter_index = 0; jitter_index < jitter_level; jitter_index++)
{ {
double jitterRadius = jitter_index * lightRadius double jitterRadius = jitter_index * lightRadius
@ -259,7 +260,7 @@ Color Scene::computePhong(const refptr<Material> material,
double diffuse_coef = directionToLight % surfaceNormal; double diffuse_coef = directionToLight % surfaceNormal;
if (diffuse_coef > 0.0) if (diffuse_coef > 0.0)
{ {
result += diffuseColor jitterResult += diffuseColor
* (*it)->getDiffuseColor() * (*it)->getDiffuseColor()
* diffuse_coef * diffuse_coef
* light_contribution; * light_contribution;
@ -269,7 +270,7 @@ Color Scene::computePhong(const refptr<Material> material,
double specular_coef = reflectedLightDirection % viewDirection; double specular_coef = reflectedLightDirection % viewDirection;
if (specular_coef > 0.0) if (specular_coef > 0.0)
{ {
result += specularColor jitterResult += specularColor
* (*it)->getSpecularColor() * (*it)->getSpecularColor()
* pow(specular_coef, shininess) * pow(specular_coef, shininess)
* light_contribution; * light_contribution;
@ -277,7 +278,8 @@ Color Scene::computePhong(const refptr<Material> material,
} }
} }
} }
result /= jitter_samples; jitterResult /= jitter_samples;
result += jitterResult;
} }
return result; return result;

View File

@ -311,6 +311,9 @@ options_item: WIDTH DEC_NUMBER {
| EXPOSURE number { | EXPOSURE number {
$$ = new ExposureNode($2->getNumber()); $$ = new ExposureNode($2->getNumber());
} }
| AMBIENT vector {
$$ = new AmbientNode($2->getVector());
}
; ;
plane: PLANE LCURLY plane_items RCURLY { plane: PLANE LCURLY plane_items RCURLY {

View File

@ -4,6 +4,7 @@ scene
options options
{ {
multisample 3 multisample 3
ambient <0.2, 0.2, 0.2>
} }
camera camera