updated scenes/die.fart, moved where backface checking was occurring in main/Scene

git-svn-id: svn://anubis/fart/trunk@217 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-03-15 22:07:06 +00:00
parent 7d9eb65fde
commit 584160265f
2 changed files with 33 additions and 14 deletions

View File

@ -159,15 +159,12 @@ Color Scene::traceRayRecurse(const Ray & ray, int depth, double factor)
/* compute the Phong lighting for each hit */
refptr<Material> material = hit.shape->getMaterial();
/* TODO: make sure this can be removed */
#if 0
/* check for backfaces */
if (ray.getDirection() % surfaceNormal > 0.0)
if (ray.getDirection() % hit.normal > 0.0)
{
/* if dot product is positive, this is a back-face */
surfaceNormal = -surfaceNormal;
hit.normal = -hit.normal;
}
#endif
color = computePhong(material,
ray,
@ -252,9 +249,6 @@ Color Scene::computePhong(const refptr<Material> material,
double shininess = material->getShininess();
const Color & diffuseColor = material->getDiffuseColor();
const Color & specularColor = material->getSpecularColor();
Vector normal = surfaceNormal;
if (normal % viewRay.getDirection() > 0.0) /* back face */
normal = -normal;
for (std::vector< refptr<Light> >::const_iterator it = m_lights.begin();
it != m_lights.end();
@ -263,7 +257,7 @@ Color Scene::computePhong(const refptr<Material> material,
Vector directionToLight = (*it)->getPosition() - surfacePoint;
directionToLight.normalize();
Vector reflectedLightDirection =
directionToLight.reflect(normal);
directionToLight.reflect(surfaceNormal);
Ray surfaceToLight(surfacePoint, directionToLight);
Color light_contribution =
@ -274,7 +268,7 @@ Color Scene::computePhong(const refptr<Material> material,
|| light_contribution.b > 0.0 )
{
/* calculate the diffuse term */
double diffuse_coef = directionToLight % normal;
double diffuse_coef = directionToLight % surfaceNormal;
if (diffuse_coef > 0.0)
{
result += diffuseColor

View File

@ -8,14 +8,39 @@ scene
camera
{
position <1.2, -2, 1.2>
position <1.2, -2, 1>
look_at <0, 0, 0>
}
light { position <10, 4, 10> color <.7, .7, .7> }
light { position <-10, -5, 10> color <.7, .7, .7> }
light { position <10, -12, 8> }
plane { position <0, 0, 1>, 0.501 }
plane
{
position <0, 0, 1>, 0.501
material
{
color <0.4, 1, 0.4>
reflectance 0.4
}
}
plane
{
position <1, 0, 0>, 1
material
{
color <1, 0.4, 0.4>
reflectance 0.4
}
}
plane
{
position <0, -1, 0>, 1
material
{
color <0.4, 0.4, 1>
reflectance 0.4
}
}
subtract
{