OpenVDB  12.0.0
Public Types | Public Member Functions | List of all members
DDA< RayT, Log2Dim > Class Template Reference

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

#include <openvdb/math/DDA.h>

Public Types

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

Public Member Functions

 DDA ()
 uninitialized constructor More...
 
 DDA (const RayT &ray)
 
 DDA (const RayT &ray, RealT startTime)
 
 DDA (const RayT &ray, RealT startTime, RealT maxTime)
 
void init (const RayT &ray, RealT startTime, RealT maxTime)
 
void init (const RayT &ray)
 
void init (const RayT &ray, RealT startTime)
 
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...
 
const Coordvoxel () 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...
 
RealType time () const
 Return the time (parameterized along the Ray) of the first hit of a tree node of size 2^Log2Dim. More...
 
RealType maxTime () const
 Return the maximum time (parameterized along the Ray). More...
 
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...
 
void print (std::ostream &os=std::cout) const
 Print information about this DDA for debugging. More...
 

Detailed Description

template<typename RayT, Index Log2Dim = 0>
class openvdb::v12_0::math::DDA< RayT, Log2Dim >

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 RealT = RealType
using RealType = typename RayT::RealType
using Vec3T = Vec3Type
using Vec3Type = typename RayT::Vec3Type

Constructor & Destructor Documentation

DDA ( )
inline

uninitialized constructor

DDA ( const RayT &  ray)
inline
DDA ( const RayT &  ray,
RealT  startTime 
)
inline
DDA ( const RayT &  ray,
RealT  startTime,
RealT  maxTime 
)
inline

Member Function Documentation

void init ( const RayT &  ray,
RealT  startTime,
RealT  maxTime 
)
inline
void init ( const RayT &  ray)
inline
void init ( const RayT &  ray,
RealT  startTime 
)
inline
RealType maxTime ( ) const
inline

Return the maximum time (parameterized along the Ray).

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.
void print ( std::ostream &  os = std::cout) const
inline

Print information about this DDA for debugging.

Parameters
osa stream to which to write textual information.
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.

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.
const Coord& 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.