45#ifndef _INCLUDED_Field3D_MIPInterp_H_
46#define _INCLUDED_Field3D_MIPInterp_H_
60template <
typename MIPField_T>
94 InterpInfo(
const size_t l,
const size_t u,
const float t)
128template <
typename MIPField_T>
133 const V3f wsVoxelSize = mip.mapping()->wsVoxelSize(0, 0, 0);
134 const float wsMinVoxelSize =
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>
148 const float wsSpotSize)
const
156 return m_interp.sample(*m_mip.rawMipLevel(0), vsP);
160 m_mip.getVsMIPCoord(vsP, i.
lower, mipVsP);
161 return m_interp.sample(*m_mip.rawMipLevel(i.
lower), mipVsP);
165 V3f mipVsP0, mipVsP1;
166 m_mip.getVsMIPCoord(
V3f(vsP), i.
lower, mipVsP0);
167 m_mip.getVsMIPCoord(
V3f(vsP), i.
upper, mipVsP1);
168 const value_type v0 = m_interp.sample(*m_mip.rawMipLevel(i.
lower), mipVsP0);
169 const value_type v1 = m_interp.sample(*m_mip.rawMipLevel(i.
upper), mipVsP1);
176template <
typename MIPField_T>
180 const size_t numLevels = m_mip.numLevels();
182 if (wsSpotSize <= m_wsVoxelSize[0]) {
186 for (
size_t i = 1, end = numLevels; i < end; ++i) {
187 if (wsSpotSize <= m_wsVoxelSize[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.
FieldType::value_type value_type
FieldType::LinearInterp LinearInterpType
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.
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.