X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgeometry%2Fextrudedshape.h;h=78dfa4911463e57951eaa0ca4524c223ab9ce9b5;hb=65b26478a62b8d715ec415164fff25fafcb35fc1;hp=400c52b8122cdee3d45627b87822aa0bd4cea19f;hpb=34273ebb7de0a2150061c4e2bfa764e11ce740f7;p=libs%2Fmath.git diff --git a/source/geometry/extrudedshape.h b/source/geometry/extrudedshape.h index 400c52b..78dfa49 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(); @@ -116,7 +116,7 @@ inline unsigned ExtrudedShape::get_intersections(const Ray &ray, Sur { T offset = T(); T limit = T(); - if(ray.get_direction()[D-1]!=T(0)) + if(ray_direction[D-1]!=T(0)) { offset = (half_length-ray_start[D-1])/ray_direction[D-1]; limit = (-half_length-ray_start[D-1])/ray_direction[D-1]; @@ -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; @@ -156,7 +157,7 @@ inline unsigned ExtrudedShape::get_intersections(const Ray &ray, Sur /* If the ray is not parallel to the base space, it may pass through the caps. */ - if(n::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]