45 #ifndef _INCLUDED_Field3D_MIPInterp_H_
46 #define _INCLUDED_Field3D_MIPInterp_H_
60 template <
typename MIPField_T>
94 InterpInfo(
const size_t l,
const size_t u,
const float t)
128 template <
typename MIPField_T>
133 const V3f wsVoxelSize = mip.mapping()->wsVoxelSize(0, 0, 0);
134 const float wsMinVoxelSize =
137 for (
size_t i = 0, end = mip.numLevels(); i < end; ++i) {
138 const float factor = std::pow(2.0f, static_cast<float>(i));
145 template <
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);
176 template <
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);
203 #endif // Include guard