OpenVDB  9.0.1
Public Types | Public Member Functions | List of all members
HDDA< RayT, CoordT > Class Template Reference

A Digital Differential Analyzer specialized for OpenVDB grids. More...

#include <nanovdb/util/HDDA.h>

Public Types

using RealType = typename RayT::RealType
 
using RealT = RealType
 
using Vec3Type = typename RayT::Vec3Type
 
using Vec3T = Vec3Type
 
using CoordType = CoordT
 

Public Member Functions

 HDDA ()=default
 Default ctor. More...
 
__hostdev__ HDDA (const RayT &ray, int dim)
 ctor from ray and dimension at which the DDA marches More...
 
__hostdev__ void init (const RayT &ray, RealT startTime, RealT maxTime, int dim)
 Re-initializes the HDDA. More...
 
__hostdev__ void init (const RayT &ray, int dim)
 Simular to init above except it uses the bounds of the input ray. More...
 
__hostdev__ bool update (const RayT &ray, int dim)
 Updates the HDDA to march with the specified dimension. More...
 
__hostdev__ int dim () const
 
__hostdev__ bool step ()
 Increment the voxel index to next intersected voxel or node and returns true if the step in time does not exceed maxTime. More...
 
__hostdev__ const CoordT & voxel () const
 Return the index coordinates of the next node or voxel intersected by the ray. If Log2Dim = 0 the return value is the actual signed coordinate of the voxel, else it is the origin of the corresponding VDB tree node or tile. More...
 
__hostdev__ RealType time () const
 Return the time (parameterized along the Ray) of the first hit of a tree node of size 2^Log2Dim. More...
 
__hostdev__ RealType maxTime () const
 Return the maximum time (parameterized along the Ray). More...
 
__hostdev__ RealType next () const
 Return the time (parameterized along the Ray) of the second (i.e. next) hit of a tree node of size 2^Log2Dim. More...
 

Detailed Description

template<typename RayT, typename CoordT = Coord>
class nanovdb::HDDA< RayT, CoordT >

A Digital Differential Analyzer specialized for OpenVDB grids.

Note
Conceptually similar to Bresenham's line algorithm applied to a 3D Ray intersecting OpenVDB nodes or voxels. Log2Dim = 0 corresponds to a voxel and Log2Dim a tree node of size 2^Log2Dim.
The Ray template class is expected to have the following methods: test(time), t0(), t1(), invDir(), and operator()(time). See the example Ray class above for their definition.

Member Typedef Documentation

using CoordType = CoordT
using RealT = RealType
using RealType = typename RayT::RealType
using Vec3T = Vec3Type
using Vec3Type = typename RayT::Vec3Type

Constructor & Destructor Documentation

HDDA ( )
default

Default ctor.

__hostdev__ HDDA ( const RayT &  ray,
int  dim 
)
inline

ctor from ray and dimension at which the DDA marches

Member Function Documentation

__hostdev__ int dim ( ) const
inline
__hostdev__ void init ( const RayT &  ray,
RealT  startTime,
RealT  maxTime,
int  dim 
)
inline

Re-initializes the HDDA.

__hostdev__ void init ( const RayT &  ray,
int  dim 
)
inline

Simular to init above except it uses the bounds of the input ray.

__hostdev__ RealType maxTime ( ) const
inline

Return the maximum time (parameterized along the Ray).

__hostdev__ RealType next ( ) const
inline

Return the time (parameterized along the Ray) of the second (i.e. next) hit of a tree node of size 2^Log2Dim.

Note
Incurs a (small) computational overhead.
__hostdev__ bool step ( )
inline

Increment the voxel index to next intersected voxel or node and returns true if the step in time does not exceed maxTime.

__hostdev__ RealType time ( ) const
inline

Return the time (parameterized along the Ray) of the first hit of a tree node of size 2^Log2Dim.

This value is initialized to startTime or ray.t0() depending on the constructor used.

Note
Incurs no computational overhead.
__hostdev__ bool update ( const RayT &  ray,
int  dim 
)
inline

Updates the HDDA to march with the specified dimension.

__hostdev__ const CoordT& voxel ( ) const
inline

Return the index coordinates of the next node or voxel intersected by the ray. If Log2Dim = 0 the return value is the actual signed coordinate of the voxel, else it is the origin of the corresponding VDB tree node or tile.

Note
Incurs no computational overhead.