45#ifndef _INCLUDED_Field3D_MIPInterp_H_
46#define _INCLUDED_Field3D_MIPInterp_H_
60template <
typename MIPField_T>
128template <
typename MIPField_T>
133 const V3f wsVoxelSize =
mip.mapping()->wsVoxelSize(0, 0, 0);
135 std::min(std::min(wsVoxelSize.x, wsVoxelSize.y), wsVoxelSize.z);
137 for (
size_t i = 0, end =
mip.numLevels();
i < end; ++
i) {
138 const float factor = std::pow(2.0f,
static_cast<float>(
i));
145template <
typename MIPField_T>
152 if (
i.lower ==
i.upper) {
156 return m_interp.sample(*m_mip.rawMipLevel(0),
vsP);
161 return m_interp.sample(*m_mip.rawMipLevel(
i.lower),
mipVsP);
176template <
typename MIPField_T>
180 const size_t numLevels = m_mip.numLevels();
186 for (
size_t i = 1, end = numLevels;
i < end; ++
i) {
194 return InterpInfo(numLevels - 1, numLevels - 1, 0.0f);
Contains the MIPField class.
#define FIELD3D_LERPFACTOR
LinearInterpType m_interp
Linear interpolator.
MIPLinearInterp(const MIPField_T &mip)
Must be constructed with a MIP field to operate on.
MIPField_T::NestedType FieldType
value_type sample(const V3d &vsP, const float wsSpotSize) const
Performs interpolation. A MIP field interpolation requires a spot size (which may be zero,...
std::vector< float > m_wsVoxelSize
Min world space voxel size for each MIP level.
FieldType::value_type value_type
FieldType::LinearInterp LinearInterpType
InterpInfo interpInfo(const float wsSpotSize) const
Computes between which levels to interpolate.
const MIPField_T & m_mip
Const reference to MIP field.
#define FIELD3D_NAMESPACE_HEADER_CLOSE
size_t upper
Coarser level.
size_t lower
Finest level.
InterpInfo(const size_t l, const size_t u, const float t)
float lerpT
Parametric position between finest and coarser.