X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgeometry%2Fextrudedshape.h;h=a62aa9a311e88bf09dd9fa5d480b425baaf38758;hb=7919982691f0b8c69d8bef1bf6471b1e7a312163;hp=400c52b8122cdee3d45627b87822aa0bd4cea19f;hpb=34273ebb7de0a2150061c4e2bfa764e11ce740f7;p=libs%2Fmath.git diff --git a/source/geometry/extrudedshape.h b/source/geometry/extrudedshape.h index 400c52b..a62aa9a 100644 --- a/source/geometry/extrudedshape.h +++ b/source/geometry/extrudedshape.h @@ -41,7 +41,7 @@ template inline ExtrudedShape::ExtrudedShape(const Shape &b, T l): length(l) { - if(l<=0) + if(l<=T(0)) throw std::invalid_argument("ExtrudedShape::ExtrudedShape"); base = b.clone(); @@ -134,8 +134,8 @@ inline unsigned ExtrudedShape::get_intersections(const Ray &ray, Sur SurfacePoint *base_points = 0; if(points) - /* Shamelessly reuse the provided storage. Align to the end of the array - so processing can start from the first (nearest) point. */ + /* Shamelessly reuse the provided storage. Align to the end of the + array so processing can start from the first (nearest) point. */ base_points = reinterpret_cast *>(points+size)-size; unsigned count = base->get_intersections(base_ray, base_points, size); @@ -147,6 +147,7 @@ inline unsigned ExtrudedShape::get_intersections(const Ray &ray, Sur points[n].position = ray_start+ray_direction*x; points[n].normal = compose(base_points[i].normal, T(0)); points[n].distance = x; + points[n].entry = base_points[i].entry; } ++n; @@ -173,6 +174,7 @@ inline unsigned ExtrudedShape::get_intersections(const Ray &ray, Sur points[n].normal = LinAl::Vector(); points[n].normal[D-1] = i; points[n].distance = x; + points[n].entry = (T(i)*ray_direction[D-1]