HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RayIntersector.h File Reference

Accelerated intersection of a ray with a narrow-band level set or a generic (e.g. density) volume. This will of course be useful for respectively surface and volume rendering. More...

#include <openvdb/math/DDA.h>
#include <openvdb/math/Math.h>
#include <openvdb/math/Ray.h>
#include <openvdb/math/Stencils.h>
#include <openvdb/Grid.h>
#include <openvdb/Types.h>
#include "Morphology.h"
#include <iostream>
#include <type_traits>
+ Include dependency graph for RayIntersector.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  openvdb::OPENVDB_VERSION_NAME::tools::LinearSearchImpl< GridT, Iterations, RealT >
 Implements linear iterative search for an iso-value of the level set along the direction of the ray. More...
 
class  openvdb::OPENVDB_VERSION_NAME::tools::LevelSetRayIntersector< GridT, SearchImplT, NodeLevel, RayT >
 This class provides the public API for intersecting a ray with a narrow-band level set. More...
 
class  openvdb::OPENVDB_VERSION_NAME::tools::VolumeRayIntersector< GridT, NodeLevel, RayT >
 This class provides the public API for intersecting a ray with a generic (e.g. density) volume. More...
 
class  openvdb::OPENVDB_VERSION_NAME::tools::LinearSearchImpl< GridT, Iterations, RealT >
 Implements linear iterative search for an iso-value of the level set along the direction of the ray. More...
 

Namespaces

 openvdb
 
 openvdb::OPENVDB_VERSION_NAME
 
 openvdb::OPENVDB_VERSION_NAME::tools
 

Detailed Description

Accelerated intersection of a ray with a narrow-band level set or a generic (e.g. density) volume. This will of course be useful for respectively surface and volume rendering.

Author
Ken Museth

This file defines two main classes, LevelSetRayIntersector and VolumeRayIntersector, as well as the three support classes LevelSetHDDA, VolumeHDDA and LinearSearchImpl. The LevelSetRayIntersector is templated on the LinearSearchImpl class and calls instances of the LevelSetHDDA class. The reason to split level set ray intersection into three classes is twofold. First LevelSetRayIntersector defines the public API for client code and LinearSearchImpl defines the actual algorithm used for the ray level-set intersection. In other words this design will allow for the public API to be fixed while the intersection algorithm can change without resolving to (slow) virtual methods. Second, LevelSetHDDA, which implements a hierarchical Differential Digital Analyzer, relies on partial template specialization, so it has to be a standalone class (as opposed to a member class of LevelSetRayIntersector). The VolumeRayIntersector is conceptually much simpler than the LevelSetRayIntersector, and hence it only depends on VolumeHDDA that implements the hierarchical Differential Digital Analyzer.

Definition in file RayIntersector.h.