1#ifndef _BBM_SPHERICAL_LINEARIZER_H_
2#define _BBM_SPHERICAL_LINEARIZER_H_
24 template<
typename CONF>
requires concepts::config<CONF>
40 const vec2d<Size_t>& samplesOut,
41 const Vec2d& startIn = 0,
42 const Vec2d& endIn = Constants::Hemisphere(),
43 const Vec2d& startOut = 0,
44 const Vec2d& endOut = Constants::Hemisphere())
73 Vec3dPair result = {0,0};
76 mask &= (idx <
size());
77 if(bbm::none(mask))
return result;
80 vec2d<Size_t> in_coord, out_coord;
81 Size_t temp_idx = idx;
92 in_coord[0] = temp_idx;
106 result.in =
bbm::select(bbm::abs(result.in) < Constants::Epsilon(), 0, result.in);
107 result.out =
bbm::select(bbm::abs(result.out) < Constants::Epsilon(), 0, result.out);
122 Size_t
operator()(
const Vec3d& in,
const Vec3d& out, Mask mask=
true)
const
129 mask &= bbm::all((sph_in >
_startIn-Constants::Epsilon()) && (sph_in <
_endIn+Constants::Epsilon()) && (sph_out >
_startOut-Constants::Epsilon()) && (sph_out <
_endOut - Constants::Epsilon()));
132 if(bbm::none(mask))
return size();
All BBM methods are defined to operate on a variety of value types and spectrum types....
inout_linearizer concept
Definition: inout_linearizer.h:28
inout_linearizer contract
Macros for checking if a class meets a concept.
#define BBM_CHECK_CONCEPT(CONCEPTNAME, CLASSNAME,...)
Check a class for a concept with bbm::concepts::archetypes in the namespace.
Definition: macro.h:35
vec2d< T > convert(const vec3d< T > &v)
Definition: spherical.h:53
Definition: aggregatebsdf.h:29
constexpr auto select(MASK &&mask, const A &a, const A &b)
Definition: backbone.h:255
Methods for handling spherical coordinates.
Definition: spherical_linearizer.h:26
Vec2d _sizeIn
Definition: spherical_linearizer.h:149
Size_t size(void) const
Size of the linearized 'array' of direction pairs.
Definition: spherical_linearizer.h:55
Size_t operator()(const Vec3d &in, const Vec3d &out, Mask mask=true) const
Map a coordinate to an linear index.
Definition: spherical_linearizer.h:122
Vec2d _startIn
Definition: spherical_linearizer.h:147
spherical_linearizer(const spherical_linearizer &src)
Copy Constructor.
Definition: spherical_linearizer.h:50
vec2d< Size_t > _samplesIn
Definition: spherical_linearizer.h:146
Vec2d _startOut
Definition: spherical_linearizer.h:148
spherical_linearizer(const vec2d< Size_t > &samplesIn, const vec2d< Size_t > &samplesOut, const Vec2d &startIn=0, const Vec2d &endIn=Constants::Hemisphere(), const Vec2d &startOut=0, const Vec2d &endOut=Constants::Hemisphere())
Constructor.
Definition: spherical_linearizer.h:39
Vec2d _sizeOut
Definition: spherical_linearizer.h:149
Vec3dPair operator()(Size_t idx, Mask mask=true) const
The in-out coordinate of the idx-th sample.
Definition: spherical_linearizer.h:71
vec2d< Size_t > _samplesOut
Definition: spherical_linearizer.h:146
Vec2d _endOut
Definition: spherical_linearizer.h:148
Vec2d _endIn
Definition: spherical_linearizer.h:147
Structure to hold a pair of directions.