OpenVDB 10.0.1
Loading...
Searching...
No Matches
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::v10_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

◆ RealT

using RealT = RealType

◆ RealType

using RealType = typename RayT::RealType

◆ Vec3T

using Vec3T = Vec3Type

◆ Vec3Type

using Vec3Type = typename RayT::Vec3Type

Constructor & Destructor Documentation

◆ DDA() [1/4]

DDA ( )
inline

uninitialized constructor

◆ DDA() [2/4]

DDA ( const RayT &  ray)
inline

◆ DDA() [3/4]

DDA ( const RayT &  ray,
RealT  startTime 
)
inline

◆ DDA() [4/4]

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

Member Function Documentation

◆ init() [1/3]

void init ( const RayT &  ray)
inline

◆ init() [2/3]

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

◆ init() [3/3]

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

◆ maxTime()

RealType maxTime ( ) const
inline

Return the maximum time (parameterized along the Ray).

◆ next()

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.

◆ print()

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.

◆ step()

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.

◆ time()

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.

◆ voxel()

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.