updating main/Scene to accept points back instead of distances from intersect()

git-svn-id: svn://anubis/fart/trunk@57 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-01-27 23:03:24 +00:00
parent 83bb409ef9
commit fa353392c6

View File

@ -179,27 +179,27 @@ vector<Scene::ShapeDistance> Scene::getRayHits(const Ray & ray)
it != m_shapes.end(); it != m_shapes.end();
it++) it++)
{ {
Solver::Result intersections = (*it)->intersect(ray); Shape::IntersectList intersections = (*it)->intersect(ray);
for (int i = 0; i < intersections.numResults; i++) for (int i = 0, num_results = intersections.size();
i < num_results;
i++)
{ {
Vector normal = Vector normal = (*it)->getNormalAt(intersections[i]);
(*it)->getNormalAt(ray[intersections.results[i]]);
double dot = normal % ray.getDirection(); double dot = normal % ray.getDirection();
double intersect_dist = (intersections[i] - ray.getOrigin()).mag();
if (dot < 0.0) /* cull back faces */ if (dot < 0.0) /* cull back faces */
{ {
double transparency = (*it)->getTransparency(); double transparency = (*it)->getTransparency();
if (transparency == 0.0 && if (transparency == 0.0 &&
(minSolidDist == 0.0 (minSolidDist == 0.0 || minSolidDist > intersect_dist))
|| minSolidDist > intersections.results[i]))
{ {
minSolidDist = intersections.results[i]; minSolidDist = intersect_dist;
} }
if (minSolidDist == 0.0 if (minSolidDist == 0.0
|| minSolidDist >= intersections.results[i]) || minSolidDist >= intersect_dist)
{ {
hits.push_back(ShapeDistance(*it, hits.push_back(ShapeDistance(*it, intersect_dist));
intersections.results[i]));
} }
} }
} }