Loading...
Searching...
No Matches
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.
__hostdev__ | HDDA (const RayT &ray, int dim)
| ctor from ray and dimension at which the DDA marches
__hostdev__ void | init (const RayT &ray, RealT startTime, RealT maxTime, int dim)
| Re-initializes the HDDA.
__hostdev__ void | init (const RayT &ray, int dim)
| Simular to init above except it uses the bounds of the input ray.
__hostdev__ bool | update (const RayT &ray, int dim)
| Updates the HDDA to march with the specified dimension.
__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.
__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.
__hostdev__ RealType | time () const
| Return the time (parameterized along the Ray) of the first hit of a tree node of size 2^Log2Dim.
__hostdev__ RealType | maxTime () const
| Return the maximum time (parameterized along the Ray).
__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.

## 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

## CoordType

template<typename RayT, typename CoordT = Coord>

using CoordType = CoordT

## RealT

template<typename RayT, typename CoordT = Coord>

using RealT = RealType

## RealType

template<typename RayT, typename CoordT = Coord>

using RealType = typename RayT::RealType

## Vec3T

template<typename RayT, typename CoordT = Coord>

using Vec3T = Vec3Type

## Vec3Type

template<typename RayT, typename CoordT = Coord>

using Vec3Type = typename RayT::Vec3Type

## Constructor & Destructor Documentation

## HDDA() [1/2]

template<typename RayT, typename CoordT = Coord>

HDDA | ( |  | ) |

default

Default ctor.

## HDDA() [2/2]

template<typename RayT, typename CoordT = Coord>

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

inline

ctor from ray and dimension at which the DDA marches

## Member Function Documentation

## dim()

template<typename RayT, typename CoordT = Coord>

__hostdev__ int dim | ( |  | ) | const

inline

## init() [1/2]

template<typename RayT, typename CoordT = Coord>

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

inline

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

## init() [2/2]

template<typename RayT, typename CoordT = Coord>

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

inline

Re-initializes the HDDA.

## maxTime()

template<typename RayT, typename CoordT = Coord>

__hostdev__ RealType maxTime | ( |  | ) | const

inline

Return the maximum time (parameterized along the Ray).

## next()

template<typename RayT, typename CoordT = Coord>

__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.

## step()

template<typename RayT, typename CoordT = Coord>

__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.

## time()

template<typename RayT, typename CoordT = Coord>

__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.

## update()

template<typename RayT, typename CoordT = Coord>

__hostdev__ bool update | ( | const RayT & | ray,
|  | int | dim )

inline

Updates the HDDA to march with the specified dimension.

## voxel()

template<typename RayT, typename CoordT = Coord>

__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.