Loading...
Searching...
No Matches
Ray< RealT > Class Template Reference

`#include <nanovdb/util/Ray.h>`

## Classes

struct | TimeSpan

## Public Types

using | RealType = RealT
using | Vec3Type = Vec3< RealT >
using | Vec3T = Vec3Type

## Public Member Functions

__hostdev__ | Ray (const Vec3Type &eye=Vec3Type(0, 0, 0), const Vec3Type &direction=Vec3Type(1, 0, 0), RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
__hostdev__ Ray & | offsetEye (RealT offset)
__hostdev__ Ray & | setEye (const Vec3Type &eye)
__hostdev__ Ray & | setDir (const Vec3Type &dir)
__hostdev__ Ray & | setMinTime (RealT t0)
__hostdev__ Ray & | setMaxTime (RealT t1)
__hostdev__ Ray & | setTimes (RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
__hostdev__ Ray & | scaleTimes (RealT scale)
__hostdev__ Ray & | reset (const Vec3Type &eye, const Vec3Type &direction, RealT t0=Delta< RealT >::value(), RealT t1=Maximum< RealT >::value())
__hostdev__ const Vec3T & | eye () const
__hostdev__ const Vec3T & | dir () const
__hostdev__ const Vec3T & | invDir () const
__hostdev__ RealT | t0 () const
__hostdev__ RealT | t1 () const
__hostdev__ int | sign (int i) const
__hostdev__ Vec3T | operator() (RealT time) const
| Return the position along the ray at the specified time.
__hostdev__ Vec3T | start () const
| Return the starting point of the ray.
__hostdev__ Vec3T | end () const
| Return the endpoint of the ray.
__hostdev__ Vec3T | mid () const
| Return the midpoint of the ray.
__hostdev__ bool | valid (RealT eps=Delta< float >::value()) const
| Return `true` if t1 is larger than t0 by at least eps.
__hostdev__ bool | test (RealT time) const
| Return `true` if time is within t0 and t1, both inclusive.
template<typename MapType >
__hostdev__ Ray | applyMap (const MapType &map) const
| Return a new Ray that is transformed with the specified map.
template<typename MapType >
__hostdev__ Ray | applyMapF (const MapType &map) const
template<typename MapType >
__hostdev__ Ray | applyInverseMap (const MapType &map) const
| Return a new Ray that is transformed with the inverse of the specified map.
template<typename MapType >
__hostdev__ Ray | applyInverseMapF (const MapType &map) const
template<typename GridType >
__hostdev__ Ray | indexToWorldF (const GridType &grid) const
| Return a new ray in world space, assuming the existing ray is represented in the index space of the specified grid.
template<typename GridType >
__hostdev__ Ray | worldToIndexF (const GridType &grid) const
| Return a new ray in index space, assuming the existing ray is represented in the world space of the specified grid.
__hostdev__ bool | intersects (const Vec3T &center, RealT radius, RealT &t0, RealT &t1) const
| Return true if this ray intersects the specified sphere.
__hostdev__ bool | intersects (const Vec3T &center, RealT radius) const
| Return true if this ray intersects the specified sphere.
__hostdev__ bool | clip (const Vec3T &center, RealT radius)
| Return true if this ray intersects the specified sphere.
__hostdev__ bool | intersects (const CoordBBox &bbox, RealT &t0, RealT &t1) const
| Returns true if this ray intersects an index bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.
template<typename OtherVec3T >
__hostdev__ bool | intersects (const BBox< OtherVec3T > &bbox, RealT &t0, RealT &t1) const
| Returns true if this ray intersects a floating-point bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.
template<typename BBoxT >
__hostdev__ bool | intersects (const BBoxT &bbox) const
| Return true if this ray intersects the specified bounding box.
template<typename BBoxT >
__hostdev__ bool | clip (const BBoxT &bbox)
| Return true if this ray intersects the specified bounding box.
__hostdev__ bool | intersects (const Vec3T &normal, RealT distance, RealT &t) const
| Return true if the Ray intersects the plane specified by a normal and distance from the origin.
__hostdev__ bool | intersects (const Vec3T &normal, const Vec3T &point, RealT &t) const
| Return true if the Ray intersects the plane specified by a normal and point.

## Member Typedef Documentation

## RealType

template<typename RealT >

using RealType = RealT

## Vec3T

template<typename RealT >

using Vec3T = Vec3Type

## Vec3Type

template<typename RealT >

using Vec3Type = Vec3<RealT>

## Constructor & Destructor Documentation

## Ray()

template<typename RealT >

__hostdev__ Ray | ( | const Vec3Type & | eye = `Vec3Type(0, 0, 0)`,
|  | const Vec3Type & | direction = `Vec3Type(1, 0, 0)`,
|  | RealT | t0 = `Delta<RealT>::value()`,
|  | RealT | t1 = `Maximum<RealT>::value()`
| ) |  |

inline

## Member Function Documentation

## applyInverseMap()

template<typename RealT >
template<typename MapType >

__hostdev__ Ray applyInverseMap | ( | const MapType & | map | ) | const

inline

Return a new Ray that is transformed with the inverse of the specified map.

Parameters

  map | the map from which to construct the new Ray by inverse mapping.

Warning
  Assumes a linear map and a normalized direction.

The requirement that the direction is normalized follows from the transformation of t0 and t1 - and that fact that we want applyMap and applyInverseMap to be inverse operations.

## applyInverseMapF()

template<typename RealT >
template<typename MapType >

__hostdev__ Ray applyInverseMapF | ( | const MapType & | map | ) | const

inline

## applyMap()

template<typename RealT >
template<typename MapType >

__hostdev__ Ray applyMap | ( | const MapType & | map | ) | const

inline

Return a new Ray that is transformed with the specified map.

Parameters

  map | the map from which to construct the new Ray.

Warning
  Assumes a linear map and a normalized direction.

The requirement that the direction is normalized follows from the transformation of t0 and t1 - and that fact that we want applyMap and applyInverseMap to be inverse operations.

## applyMapF()

template<typename RealT >
template<typename MapType >

__hostdev__ Ray applyMapF | ( | const MapType & | map | ) | const

inline

## clip() [1/2]

template<typename RealT >
template<typename BBoxT >

__hostdev__ bool clip | ( | const BBoxT & | bbox | ) |

inline

Return true if this ray intersects the specified bounding box.

Parameters

  bbox | Axis-aligned bounding box in the same space as this ray.

Warning
  If bbox is of the type CoordBBox it is converted to a floating-point bounding box, which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.

Note
  For intersection this ray is clipped to the two intersection points.

## clip() [2/2]

template<typename RealT >

__hostdev__ bool clip | ( | const Vec3T & | center,
|  | RealT | radius
| ) |  |

inline

Return true if this ray intersects the specified sphere.

Note
  For intersection this ray is clipped to the two intersection points.

Parameters

  center | The center of the sphere in the same space as this ray.
  radius | The radius of the sphere in the same units as this ray.

## dir()

template<typename RealT >

__hostdev__ const Vec3T & dir | ( |  | ) | const

inline

## end()

template<typename RealT >

__hostdev__ Vec3T end | ( |  | ) | const

inline

Return the endpoint of the ray.

## eye()

template<typename RealT >

__hostdev__ const Vec3T & eye | ( |  | ) | const

inline

## indexToWorldF()

template<typename RealT >
template<typename GridType >

__hostdev__ Ray indexToWorldF | ( | const GridType & | grid | ) | const

inline

Return a new ray in world space, assuming the existing ray is represented in the index space of the specified grid.

## intersects() [1/7]

template<typename RealT >
template<typename OtherVec3T >

__hostdev__ bool intersects | ( | const BBox< OtherVec3T > & | bbox,
|  | RealT & | t0,
|  | RealT & | t1
| ) |  | const

inline

Returns true if this ray intersects a floating-point bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.

## intersects() [2/7]

template<typename RealT >
template<typename BBoxT >

__hostdev__ bool intersects | ( | const BBoxT & | bbox | ) | const

inline

Return true if this ray intersects the specified bounding box.

Parameters

  bbox | Axis-aligned bounding box in the same space as this ray.

Warning
  If bbox is of the type CoordBBox it is converted to a floating-point bounding box, which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.

## intersects() [3/7]

template<typename RealT >

__hostdev__ bool intersects | ( | const CoordBBox & | bbox,
|  | RealT & | t0,
|  | RealT & | t1
| ) |  | const

inline

Returns true if this ray intersects an index bounding box. If the return value is true t0 and t1 are set to the intersection times along the ray.

Warning
  Intersection with a CoordBBox internally converts to a floating-point bbox which imples that the max is padded with one voxel, i.e. bbox.max += 1! This avoids gaps between neighboring CoordBBox'es, say from neighboring tree nodes.

## intersects() [4/7]

template<typename RealT >

__hostdev__ bool intersects | ( | const Vec3T & | center,
|  | RealT | radius
| ) |  | const

inline

Return true if this ray intersects the specified sphere.

Parameters

  center | The center of the sphere in the same space as this ray.
  radius | The radius of the sphere in the same units as this ray.

## intersects() [5/7]

template<typename RealT >

__hostdev__ bool intersects | ( | const Vec3T & | center,
|  | RealT | radius,
|  | RealT & | t0,
|  | RealT & | t1
| ) |  | const

inline

Return true if this ray intersects the specified sphere.

Parameters

  center | The center of the sphere in the same space as this ray.
  radius | The radius of the sphere in the same units as this ray.
  t0 | The first intersection point if an intersection exists.
  t1 | The second intersection point if an intersection exists.

Note
  If the return value is true, i.e. a hit, and t0 = this->t0() or t1 == this->t1() only one true intersection exist.

## intersects() [6/7]

template<typename RealT >

__hostdev__ bool intersects | ( | const Vec3T & | normal,
|  | const Vec3T & | point,
|  | RealT & | t
| ) |  | const

inline

Return true if the Ray intersects the plane specified by a normal and point.

Parameters

  normal | Normal of the plane.
  point | Point in the plane.
  t | Time of intersection, if one exists.

## intersects() [7/7]

template<typename RealT >

__hostdev__ bool intersects | ( | const Vec3T & | normal,
|  | RealT | distance,
|  | RealT & | t
| ) |  | const

inline

Return true if the Ray intersects the plane specified by a normal and distance from the origin.

Parameters

  normal | Normal of the plane.
  distance | Distance of the plane to the origin.
  t | Time of intersection, if one exists.

## invDir()

template<typename RealT >

__hostdev__ const Vec3T & invDir | ( |  | ) | const

inline

## mid()

template<typename RealT >

__hostdev__ Vec3T mid | ( |  | ) | const

inline

Return the midpoint of the ray.

## offsetEye()

template<typename RealT >

__hostdev__ Ray & offsetEye | ( | RealT | offset | ) |

inline

## operator()()

template<typename RealT >

__hostdev__ Vec3T operator() | ( | RealT | time | ) | const

inline

Return the position along the ray at the specified time.

## reset()

template<typename RealT >

__hostdev__ Ray & reset | ( | const Vec3Type & | eye,
|  | const Vec3Type & | direction,
|  | RealT | t0 = `Delta<RealT>::value()`,
|  | RealT | t1 = `Maximum<RealT>::value()`
| ) |  |

inline

## scaleTimes()

template<typename RealT >

__hostdev__ Ray & scaleTimes | ( | RealT | scale | ) |

inline

## setDir()

template<typename RealT >

__hostdev__ Ray & setDir | ( | const Vec3Type & | dir | ) |

inline

## setEye()

template<typename RealT >

__hostdev__ Ray & setEye | ( | const Vec3Type & | eye | ) |

inline

## setMaxTime()

template<typename RealT >

__hostdev__ Ray & setMaxTime | ( | RealT | t1 | ) |

inline

## setMinTime()

template<typename RealT >

__hostdev__ Ray & setMinTime | ( | RealT | t0 | ) |

inline

## setTimes()

template<typename RealT >

__hostdev__ Ray & setTimes | ( | RealT | t0 = `Delta<RealT>::value()`,
|  | RealT | t1 = `Maximum<RealT>::value()`
| ) |  |

inline

## sign()

template<typename RealT >

__hostdev__ int sign | ( | int | i | ) | const

inline

## start()

template<typename RealT >

__hostdev__ Vec3T start | ( |  | ) | const

inline

Return the starting point of the ray.

## t0()

template<typename RealT >

__hostdev__ RealT t0 | ( |  | ) | const

inline

## t1()

template<typename RealT >

__hostdev__ RealT t1 | ( |  | ) | const

inline

## test()

template<typename RealT >

__hostdev__ bool test | ( | RealT | time | ) | const

inline

Return `true` if time is within t0 and t1, both inclusive.

## valid()

template<typename RealT >

__hostdev__ bool valid | ( | RealT | eps = `Delta<float>::value()` | ) | const

inline

Return `true` if t1 is larger than t0 by at least eps.

## worldToIndexF()

template<typename RealT >
template<typename GridType >

__hostdev__ Ray worldToIndexF | ( | const GridType & | grid | ) | const

inline

Return a new ray in index space, assuming the existing ray is represented in the world space of the specified grid.