Box Functions¶
Functions that operate on bounding boxes.
#include <Imath/ImathBoxAlgo.h>
-
template<class T>
inline constexpr T Imath::clip(const T &p, const Box<T> &box) noexcept¶ Clip the coordinates of a point,
p
, against aBox<T>
,box
.Return the closest point to
p
that is inside the box.
-
template<class T>
inline constexpr T Imath::closestPointInBox(const T &p, const Box<T> &box) noexcept¶ Return the point in or on the
Box<T>
,box
, that is closesest to the point,p
.
-
template<class S, class T>
Box<Vec3<S>> Imath::transform(const Box<Vec3<S>> &box, const Matrix44<T> &m) noexcept¶ Transform a 3D box by a matrix, and compute a new box that tightly encloses the transformed box.
Return the transformed box.
If
m
is an affine transform, then we use James Arvo’s fast method as described in “Graphics Gems”, Academic Press, 1990, pp. 548-550.A transformed empty box is still empty, and a transformed infinite box is still infinite.
-
template<class S, class T>
Box<Vec3<S>> Imath::affineTransform(const Box<Vec3<S>> &box, const Matrix44<T> &m) noexcept¶ Transform a 3D box by a matrix whose rightmost column
(0 0 0 1)
, and compute a new box that tightly encloses the transformed box.Return the transformed box.
As in the transform() function, use James Arvo’s fast method if possible.
A transformed empty or infinite box is still empty or infinite.
-
template<class T>
constexpr bool Imath::findEntryAndExitPoints(const Line3<T> &r, const Box<Vec3<T>> &b, Vec3<T> &entry, Vec3<T> &exit) noexcept¶ Compute the points where a ray,
r
, enters and exits a 3D box,b
:Return true if the ray starts inside the box or if the ray starts outside and intersects the box, or return false otherwise (that is, if the ray does not intersect the box).
The entry and exit points are the points on two of the faces of the box when the function returns true (the entry end exit points may be on either side of the ray’s origin), or undefined if the the function returns false.
-
template<class T>
constexpr bool Imath::intersects(const Box<Vec3<T>> &b, const Line3<T> &r, Vec3<T> &ip) noexcept¶ Intersect a ray,
r
, with a 3D box,b, and compute the intersection point, returned in
ip`.The intersection point is
the ray’s origin if the ray starts inside the box
a point on one of the faces of the box if the ray starts outside the box
undefined when intersect() returns false
- Returns:
true if the ray starts inside the box or if the ray starts outside and intersects the box
false if the ray starts outside the box and intersects it, but the intersection is behind the ray’s origin.
false if the ray starts outside and does not intersect it