OpenVDB  9.0.1
Public Types | Public Member Functions | Friends | List of all members
LinearSearchImpl< GridT, Iterations, RealT > Class Template Reference

Implements linear iterative search for an iso-value of the level set along the direction of the ray. More...

#include <openvdb/tools/RayIntersector.h>

Public Types

using RayT = math::Ray< RealT >
 
using VecT = math::Vec3< RealT >
 
using ValueT = typename GridT::ValueType
 
using AccessorT = typename GridT::ConstAccessor
 
using StencilT = math::BoxStencil< GridT >
 

Public Member Functions

 LinearSearchImpl (const GridT &grid, const ValueT &isoValue=zeroVal< ValueT >())
 Constructor from a grid. More...
 
const ValueTgetIsoValue () const
 Return the iso-value used for ray-intersections. More...
 
bool setIndexRay (const RayT &iRay)
 Return false if the ray misses the bbox of the grid. More...
 
bool setWorldRay (const RayT &wRay)
 Return false if the ray misses the bbox of the grid. More...
 
void getIndexPos (VecT &xyz) const
 Get the intersection point in index space. More...
 
void getWorldPos (VecT &xyz) const
 Get the intersection point in world space. More...
 
void getWorldPosAndNml (VecT &xyz, VecT &nml)
 Get the intersection point and normal in world space. More...
 
RealT getIndexTime () const
 Return the time of intersection along the index ray. More...
 
RealT getWorldTime () const
 Return the time of intersection along the world ray. More...
 

Friends

template<typename , int >
struct math::LevelSetHDDA
 

Detailed Description

template<typename GridT, int Iterations, typename RealT>
class openvdb::v9_0::tools::LinearSearchImpl< GridT, Iterations, RealT >

Implements linear iterative search for an iso-value of the level set along the direction of the ray.

Note
Since this class is used internally in LevelSetRayIntersector (define above) and LevelSetHDDA (defined below) client code should never interact directly with its API. This also explains why we are not concerned with the fact that several of its methods are unsafe to call unless roots were already detected.

It is approximate due to the limited number of iterations which can can be defined with a template parameter. However the default value has proven surprisingly accurate and fast. In fact more iterations are not guaranteed to give significantly better results.

Warning
Since the root-searching algorithm is approximate (first-order) it is possible to miss intersections if the iso-value is too close to the inside or outside of the narrow band (typically a distance less than a voxel unit).
Since this class internally stores a ValueAccessor it is NOT thread-safe, so make sure to give each thread its own instance. This of course also means that the cost of allocating an instance should (if possible) be amortized over as many ray intersections as possible.

Member Typedef Documentation

using AccessorT = typename GridT::ConstAccessor
using RayT = math::Ray<RealT>
using StencilT = math::BoxStencil<GridT>
using ValueT = typename GridT::ValueType
using VecT = math::Vec3<RealT>

Constructor & Destructor Documentation

LinearSearchImpl ( const GridT &  grid,
const ValueT isoValue = zeroVal<ValueT>() 
)
inline

Constructor from a grid.

Exceptions
RunTimeErrorif the grid is empty.
ValueErrorif the isoValue is not inside the narrow-band.

Member Function Documentation

void getIndexPos ( VecT xyz) const
inline

Get the intersection point in index space.

Parameters
xyzThe position in index space of the intersection.
RealT getIndexTime ( ) const
inline

Return the time of intersection along the index ray.

const ValueT& getIsoValue ( ) const
inline

Return the iso-value used for ray-intersections.

void getWorldPos ( VecT xyz) const
inline

Get the intersection point in world space.

Parameters
xyzThe position in world space of the intersection.
void getWorldPosAndNml ( VecT xyz,
VecT nml 
)
inline

Get the intersection point and normal in world space.

Parameters
xyzThe position in world space of the intersection.
nmlThe surface normal in world space of the intersection.
RealT getWorldTime ( ) const
inline

Return the time of intersection along the world ray.

bool setIndexRay ( const RayT iRay)
inline

Return false if the ray misses the bbox of the grid.

Parameters
iRayRay represented in index space.
Warning
Call this method before the ray traversal starts.
bool setWorldRay ( const RayT wRay)
inline

Return false if the ray misses the bbox of the grid.

Parameters
wRayRay represented in world space.
Warning
Call this method before the ray traversal starts.

Friends And Related Function Documentation

friend struct math::LevelSetHDDA
friend