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:
parent
70a5ef74d4
commit
c115dec69b
@ -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()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,25 +260,26 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* calculate the specular term */
|
/* calculate the specular term */
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result /= jitter_samples;
|
jitterResult /= jitter_samples;
|
||||||
|
result += jitterResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -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 {
|
||||||
|
@ -4,6 +4,7 @@ scene
|
|||||||
options
|
options
|
||||||
{
|
{
|
||||||
multisample 3
|
multisample 3
|
||||||
|
ambient <0.2, 0.2, 0.2>
|
||||||
}
|
}
|
||||||
|
|
||||||
camera
|
camera
|
||||||
|
Loading…
x
Reference in New Issue
Block a user