OpenVDB  9.0.1
Classes | Public Types | Public Member Functions | List of all members
Ray< RealT > Class Template Reference

#include <nanovdb/util/Ray.h>

Classes

struct  TimeSpan
 

Public Types

using RealType = RealT
 
using Vec3Type = Vec3< RealT >
 
using Vec3T = Vec3Type
 

Public Member Functions

__hostdev__ Ray (const Vec3Type &eye=Vec3Type(0, 0, 0), const Vec3Type &direction=Vec3Type(1, 0, 0), RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
 
__hostdev__ RayoffsetEye (RealT offset)
 
__hostdev__ RaysetEye (const Vec3Type &eye)
 
__hostdev__ RaysetDir (const Vec3Type &dir)
 
__hostdev__ RaysetMinTime (RealT t0)
 
__hostdev__ RaysetMaxTime (RealT t1)
 
__hostdev__ RaysetTimes (RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
 
__hostdev__ RayscaleTimes (RealT scale)
 
__hostdev__ Rayreset (const Vec3Type &eye, const Vec3Type &direction, RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
 
__hostdev__ const Vec3Teye () const
 
__hostdev__ const Vec3Tdir () const
 
__hostdev__ const Vec3TinvDir () const
 
__hostdev__ RealT t0 () const
 
__hostdev__ RealT t1 () const
 
__hostdev__ int sign (int i) const
 
__hostdev__ Vec3T operator() (RealT time) const
 Return the position along the ray at the specified time. More...
 
__hostdev__ Vec3T start () const
 Return the starting point of the ray. More...
 
__hostdev__ Vec3T end () const
 Return the endpoint of the ray. More...
 
__hostdev__ Vec3T mid () const
 Return the midpoint of the ray. More...
 
__hostdev__ bool valid (RealT eps=Delta< float >::value()) const
 Return true if t1 is larger than t0 by at least eps. More...
 
__hostdev__ bool test (RealT time) const
 Return true if time is within t0 and t1, both inclusive. More...
 
template<typename MapType >
__hostdev__ Ray applyMap (const MapType &map) const
 Return a new Ray that is transformed with the specified map. More...
 
template<typename MapType >
__hostdev__ Ray applyMapF (const MapType &map) const
 
template<typename MapType >
__hostdev__ Ray applyInverseMap (const MapType &map) const
 Return a new Ray that is transformed with the inverse of the specified map. More...
 
template<typename MapType >
__hostdev__ Ray applyInverseMapF (const MapType &map) const
 
template<typename GridType >
__hostdev__ Ray indexToWorldF (const GridType &grid) const
 Return a new ray in world space, assuming the existing ray is represented in the index space of the specified grid. More...
 
template<typename GridType >
__hostdev__ Ray worldToIndexF (const GridType &grid) const
 Return a new ray in index space, assuming the existing ray is represented in the world space of the specified grid. More...
 
__hostdev__ bool intersects (const Vec3T &center, RealT radius, RealT &t0, RealT &t1) const
 Return true if this ray intersects the specified sphere. More...
 
__hostdev__ bool intersects (const Vec3T &center, RealT radius) const
 Return true if this ray intersects the specified sphere. More...
 
__hostdev__ bool clip (const Vec3T &center, RealT radius)
 Return true if this ray intersects the specified sphere. More...
 
__hostdev__ bool intersects (const CoordBBox &bbox, RealT &t0, RealT &t1) const
 Returns true if this ray intersects an index bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray. More...
 
template<typename OtherVec3T >
__hostdev__ bool intersects (const BBox< OtherVec3T > &bbox, RealT &t0, RealT &t1) const
 Returns true if this ray intersects a floating-point bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray. More...
 
template<typename BBoxT >
__hostdev__ bool intersects (const BBoxT &bbox) const
 Return true if this ray intersects the specified bounding box. More...
 
template<typename BBoxT >
__hostdev__ bool clip (const BBoxT &bbox)
 Return true if this ray intersects the specified bounding box. More...
 
__hostdev__ bool intersects (const Vec3T &normal, RealT distance, RealT &t) const
 Return true if the Ray intersects the plane specified by a normal and distance from the origin. More...
 
__hostdev__ bool intersects (const Vec3T &normal, const Vec3T &point, RealT &t) const
 Return true if the Ray intersects the plane specified by a normal and point. More...
 

Member Typedef Documentation

using RealType = RealT
using Vec3T = Vec3Type
using Vec3Type = Vec3<RealT>

Constructor & Destructor Documentation

__hostdev__ Ray ( const Vec3Type eye = Vec3Type(0, 0, 0),
const Vec3Type direction = Vec3Type(1, 0, 0),
RealT  t0 = Delta<RealT>::value(),
RealT  t1 = Maximum<RealT>::value() 
)
inline

Member Function Documentation

__hostdev__ Ray applyInverseMap ( const MapType &  map) const
inline

Return a new Ray that is transformed with the inverse of the specified map.

Parameters
mapthe map from which to construct the new Ray by inverse mapping.
Warning
Assumes a linear map and a normalized direction.

The requirement that the direction is normalized follows from the transformation of t0 and t1 - and that fact that we want applyMap and applyInverseMap to be inverse operations.

__hostdev__ Ray applyInverseMapF ( const MapType &  map) const
inline
__hostdev__ Ray applyMap ( const MapType &  map) const
inline

Return a new Ray that is transformed with the specified map.

Parameters
mapthe map from which to construct the new Ray.
Warning
Assumes a linear map and a normalized direction.

The requirement that the direction is normalized follows from the transformation of t0 and t1 - and that fact that we want applyMap and applyInverseMap to be inverse operations.

__hostdev__ Ray applyMapF ( const MapType &  map) const
inline
__hostdev__ bool clip ( const Vec3T center,
RealT  radius 
)
inline

Return true if this ray intersects the specified sphere.

Note
For intersection this ray is clipped to the two intersection points.
Parameters
centerThe center of the sphere in the same space as this ray.
radiusThe radius of the sphere in the same units as this ray.
__hostdev__ bool clip ( const BBoxT &  bbox)
inline

Return true if this ray intersects the specified bounding box.

Parameters
bboxAxis-aligned bounding box in the same space as this ray.
Warning
If bbox is of the type CoordBBox it is converted to a floating-point bounding box, which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.
Note
For intersection this ray is clipped to the two intersection points.
__hostdev__ const Vec3T& dir ( ) const
inline
__hostdev__ Vec3T end ( ) const
inline

Return the endpoint of the ray.

__hostdev__ const Vec3T& eye ( ) const
inline
__hostdev__ Ray indexToWorldF ( const GridType grid) const
inline

Return a new ray in world space, assuming the existing ray is represented in the index space of the specified grid.

__hostdev__ bool intersects ( const Vec3T center,
RealT  radius,
RealT &  t0,
RealT &  t1 
) const
inline

Return true if this ray intersects the specified sphere.

Parameters
centerThe center of the sphere in the same space as this ray.
radiusThe radius of the sphere in the same units as this ray.
t0The first intersection point if an intersection exists.
t1The second intersection point if an intersection exists.
Note
If the return value is true, i.e. a hit, and t0 = this->t0() or t1 == this->t1() only one true intersection exist.
__hostdev__ bool intersects ( const Vec3T center,
RealT  radius 
) const
inline

Return true if this ray intersects the specified sphere.

Parameters
centerThe center of the sphere in the same space as this ray.
radiusThe radius of the sphere in the same units as this ray.
__hostdev__ bool intersects ( const CoordBBox bbox,
RealT &  t0,
RealT &  t1 
) const
inline

Returns true if this ray intersects an index bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.

Warning
Intersection with a CoordBBox internally converts to a floating-point bbox which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.
__hostdev__ bool intersects ( const BBox< OtherVec3T > &  bbox,
RealT &  t0,
RealT &  t1 
) const
inline

Returns true if this ray intersects a floating-point bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.

__hostdev__ bool intersects ( const BBoxT &  bbox) const
inline

Return true if this ray intersects the specified bounding box.

Parameters
bboxAxis-aligned bounding box in the same space as this ray.
Warning
If bbox is of the type CoordBBox it is converted to a floating-point bounding box, which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.
__hostdev__ bool intersects ( const Vec3T normal,
RealT  distance,
RealT &  t 
) const
inline

Return true if the Ray intersects the plane specified by a normal and distance from the origin.

Parameters
normalNormal of the plane.
distanceDistance of the plane to the origin.
tTime of intersection, if one exists.
__hostdev__ bool intersects ( const Vec3T normal,
const Vec3T point,
RealT &  t 
) const
inline

Return true if the Ray intersects the plane specified by a normal and point.

Parameters
normalNormal of the plane.
pointPoint in the plane.
tTime of intersection, if one exists.
__hostdev__ const Vec3T& invDir ( ) const
inline
__hostdev__ Vec3T mid ( ) const
inline

Return the midpoint of the ray.

__hostdev__ Ray& offsetEye ( RealT  offset)
inline
__hostdev__ Vec3T operator() ( RealT  time) const
inline

Return the position along the ray at the specified time.

__hostdev__ Ray& reset ( const Vec3Type eye,
const Vec3Type direction,
RealT  t0 = Delta<RealT>::value(),
RealT  t1 = Maximum<RealT>::value() 
)
inline
__hostdev__ Ray& scaleTimes ( RealT  scale)
inline
__hostdev__ Ray& setDir ( const Vec3Type dir)
inline
__hostdev__ Ray& setEye ( const Vec3Type eye)
inline
__hostdev__ Ray& setMaxTime ( RealT  t1)
inline
__hostdev__ Ray& setMinTime ( RealT  t0)
inline
__hostdev__ Ray& setTimes ( RealT  t0 = Delta<RealT>::value(),
RealT  t1 = Maximum<RealT>::value() 
)
inline
__hostdev__ int sign ( int  i) const
inline
__hostdev__ Vec3T start ( ) const
inline

Return the starting point of the ray.

__hostdev__ RealT t0 ( ) const
inline
__hostdev__ RealT t1 ( ) const
inline
__hostdev__ bool test ( RealT  time) const
inline

Return true if time is within t0 and t1, both inclusive.

__hostdev__ bool valid ( RealT  eps = Delta<float>::value()) const
inline

Return true if t1 is larger than t0 by at least eps.

__hostdev__ Ray worldToIndexF ( const GridType grid) const
inline

Return a new ray in index space, assuming the existing ray is represented in the world space of the specified grid.