added scenes/trans-boxes.fart, changed Scene to consider all back-faces as front-faces by inverting the normal vector, fixed bug in Scene::calculateLightContribution() which was messing up shadow values and back-face intensities for transparent objects

git-svn-id: svn://anubis/fart/trunk@187 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop committed 2009-03-06 19:12:26 +00:00
1 parent b50c4de1bc
commit 24ef1eca3c
3 files changed
+57 -2

No files matched your search

+10 -2
View File
@@ -158,6 +158,13 @@ Color Scene::traceRayRecurse(const Ray & ray, int depth, double factor)
Vector surfacePoint = ray[hit.dist];
Vector surfaceNormal = hit.shape->getNormalAt(surfacePoint);
/* check for backfaces */
if (ray.getDirection() % surfaceNormal > 0.0)
{
/* if dot product is positive, this is a back-face */
surfaceNormal = -surfaceNormal;
}
color = computePhong(material,
ray,
surfacePoint,
@@ -215,7 +222,6 @@ Scene::ShapeDistance Scene::getRayClosestHit(const Ray & ray)
{
refptr<Shape> shape = intersections[i].shape;
const Vector & isect_point = intersections[i].vector;
Vector normal = shape->getNormalAt(isect_point);
double intersect_dist = (isect_point - ray.getOrigin()).mag();
if (foundOne == false || intersect_dist < hit.dist)
{
@@ -313,7 +319,9 @@ double Scene::calculateLightContribution(const Ray & toLight,
if ( contrib < SCENE_FACTOR_THRESHOLD )
break;
dist_so_far += hit.dist + 0.0001;
double offset = hit.dist + 0.0001;
dist_so_far += offset;
currentRay = currentRay.shift(offset);
}
return contrib;