OpenVDB  12.0.0
Public Types | Public Member Functions | List of all members
LevelSetRayTracer< GridT, IntersectorT > Class Template Reference

A (very) simple multithreaded ray tracer specifically for narrow-band level sets. More...

#include <openvdb/tools/RayTracer.h>

Public Types

using GridType = GridT
 
using Vec3Type = typename IntersectorT::Vec3Type
 
using RayType = typename IntersectorT::RayType
 

Public Member Functions

 LevelSetRayTracer (const GridT &grid, const BaseShader &shader, BaseCamera &camera, size_t pixelSamples=1, unsigned int seed=0)
 Constructor based on an instance of the grid to be rendered. More...
 
 LevelSetRayTracer (const IntersectorT &inter, const BaseShader &shader, BaseCamera &camera, size_t pixelSamples=1, unsigned int seed=0)
 Constructor based on an instance of the intersector performing the ray-intersections. More...
 
 LevelSetRayTracer (const LevelSetRayTracer &other)
 Copy constructor. More...
 
 ~LevelSetRayTracer ()
 Destructor. More...
 
void setGrid (const GridT &grid)
 Set the level set grid to be ray-traced. More...
 
void setIntersector (const IntersectorT &inter)
 Set the intersector that performs the actual intersection of the rays against the narrow-band level set. More...
 
void setShader (const BaseShader &shader)
 Set the shader derived from the abstract BaseShader class. More...
 
void setCamera (BaseCamera &camera)
 Set the camera derived from the abstract BaseCamera class. More...
 
void setPixelSamples (size_t pixelSamples, unsigned int seed=0)
 Set the number of pixel samples and the seed for jittered sub-rays. A value larger than one implies anti-aliasing by jittered super-sampling. More...
 
void render (bool threaded=true) const
 Perform the actual (potentially multithreaded) ray-tracing. More...
 
void operator() (const tbb::blocked_range< size_t > &range) const
 Public method required by tbb::parallel_for. More...
 

Detailed Description

template<typename GridT, typename IntersectorT = tools::LevelSetRayIntersector<GridT>>
class openvdb::v12_0::tools::LevelSetRayTracer< GridT, IntersectorT >

A (very) simple multithreaded ray tracer specifically for narrow-band level sets.

Included primarily as a reference implementation.

Member Typedef Documentation

using GridType = GridT
using RayType = typename IntersectorT::RayType
using Vec3Type = typename IntersectorT::Vec3Type

Constructor & Destructor Documentation

LevelSetRayTracer ( const GridT &  grid,
const BaseShader shader,
BaseCamera camera,
size_t  pixelSamples = 1,
unsigned int  seed = 0 
)
inline

Constructor based on an instance of the grid to be rendered.

LevelSetRayTracer ( const IntersectorT &  inter,
const BaseShader shader,
BaseCamera camera,
size_t  pixelSamples = 1,
unsigned int  seed = 0 
)
inline

Constructor based on an instance of the intersector performing the ray-intersections.

LevelSetRayTracer ( const LevelSetRayTracer< GridT, IntersectorT > &  other)
inline

Copy constructor.

~LevelSetRayTracer ( )
inline

Destructor.

Member Function Documentation

void operator() ( const tbb::blocked_range< size_t > &  range) const
inline

Public method required by tbb::parallel_for.

Warning
Never call it directly.
void render ( bool  threaded = true) const
inline

Perform the actual (potentially multithreaded) ray-tracing.

void setCamera ( BaseCamera camera)
inline

Set the camera derived from the abstract BaseCamera class.

void setGrid ( const GridT &  grid)
inline

Set the level set grid to be ray-traced.

void setIntersector ( const IntersectorT &  inter)
inline

Set the intersector that performs the actual intersection of the rays against the narrow-band level set.

void setPixelSamples ( size_t  pixelSamples,
unsigned int  seed = 0 
)
inline

Set the number of pixel samples and the seed for jittered sub-rays. A value larger than one implies anti-aliasing by jittered super-sampling.

Exceptions
ValueErrorif pixelSamples is equal to zero.
void setShader ( const BaseShader shader)
inline

Set the shader derived from the abstract BaseShader class.

Note
The shader is not assumed to be thread-safe so each thread will get its only deep copy. For instance it could contains a ValueAccessor into another grid with auxiliary shading information. Thus, make sure it is relatively light-weight and efficient to copy (which is the case for ValueAccesors).