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:
parent
83bb409ef9
commit
fa353392c6
@ -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]));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user