Change CSG to derive the intersect function and do the calculation there instead of the local one.

Also use the bounding box to reject ray that don't it that CSG element.
This commit is contained in:
Godzil
2020-03-09 13:45:57 +00:00
parent 8550d4068f
commit 1510de3b36

View File

@@ -25,26 +25,32 @@ CSG::CSG(OperationType operation, Shape *left, Shape *right) : Shape(SHAPE_CSG),
}
Intersect CSG::localIntersect(Ray r)
{
return this->intersect(r);
}
Intersect CSG::intersect(Ray r)
{
int i;
Intersect ret = Intersect();
if (this->bounds.intesectMe(r))
{
Intersect leftxs = this->left->intersect(r);
Intersect rightxs = this->right->intersect(r);
for(i = 0; i < rightxs.count(); i++)
for (i = 0 ; i < rightxs.count() ; i++)
{
leftxs.add(rightxs[i]);
}
Intersect ret = this->filterIntersections(leftxs);
this->filterIntersections(leftxs, ret);
}
return ret;
}
Intersect CSG::intersect(Ray r)
{
return localIntersect(r);
}
Tuple CSG::localNormalAt(Tuple point, Intersection *hit)
{
return Vector(1, 0, 0);