Removed use of template template parameters from VolumeResampler.
This commit is contained in:
parent
fbdfe3a4ec
commit
fcefe27192
@ -93,7 +93,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
RawVolume<uint8_t> volDataLowLOD(PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(15, 31, 31)));
|
RawVolume<uint8_t> volDataLowLOD(PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(15, 31, 31)));
|
||||||
|
|
||||||
VolumeResampler<SimpleVolume, RawVolume, uint8_t> volumeResampler(&volData, PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(31, 63, 63)), &volDataLowLOD, volDataLowLOD.getEnclosingRegion());
|
VolumeResampler< SimpleVolume<uint8_t>, RawVolume<uint8_t> > volumeResampler(&volData, PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(31, 63, 63)), &volDataLowLOD, volDataLowLOD.getEnclosingRegion());
|
||||||
volumeResampler.execute();
|
volumeResampler.execute();
|
||||||
|
|
||||||
//Extract the surface
|
//Extract the surface
|
||||||
|
@ -28,11 +28,11 @@ freely, subject to the following restrictions:
|
|||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType>
|
template< typename SrcVolumeType, typename DestVolumeType>
|
||||||
class VolumeResampler
|
class VolumeResampler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VolumeResampler(SrcVolumeType<VoxelType>* pVolSrc, Region regSrc, DestVolumeType<VoxelType>* pVolDst, Region regDst);
|
VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst);
|
||||||
|
|
||||||
void execute();
|
void execute();
|
||||||
|
|
||||||
@ -41,11 +41,11 @@ namespace PolyVox
|
|||||||
void resampleArbitrary();
|
void resampleArbitrary();
|
||||||
|
|
||||||
//Source data
|
//Source data
|
||||||
SrcVolumeType<VoxelType>* m_pVolSrc;
|
SrcVolumeType* m_pVolSrc;
|
||||||
Region m_regSrc;
|
Region m_regSrc;
|
||||||
|
|
||||||
//Destination data
|
//Destination data
|
||||||
DestVolumeType<VoxelType>* m_pVolDst;
|
DestVolumeType* m_pVolDst;
|
||||||
Region m_regDst;
|
Region m_regDst;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ freely, subject to the following restrictions:
|
|||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType>
|
template< typename SrcVolumeType, typename DestVolumeType>
|
||||||
VolumeResampler<SrcVolumeType, DestVolumeType, VoxelType>::VolumeResampler(SrcVolumeType<VoxelType>* pVolSrc, Region regSrc, DestVolumeType<VoxelType>* pVolDst, Region regDst)
|
VolumeResampler<SrcVolumeType, DestVolumeType>::VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst)
|
||||||
:m_pVolSrc(pVolSrc)
|
:m_pVolSrc(pVolSrc)
|
||||||
,m_regSrc(regSrc)
|
,m_regSrc(regSrc)
|
||||||
,m_pVolDst(pVolDst)
|
,m_pVolDst(pVolDst)
|
||||||
@ -34,8 +34,8 @@ namespace PolyVox
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType>
|
template< typename SrcVolumeType, typename DestVolumeType>
|
||||||
void VolumeResampler<SrcVolumeType, DestVolumeType, VoxelType>::execute()
|
void VolumeResampler<SrcVolumeType, DestVolumeType>::execute()
|
||||||
{
|
{
|
||||||
int32_t uSrcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX() + 1;
|
int32_t uSrcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX() + 1;
|
||||||
int32_t uSrcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY() + 1;
|
int32_t uSrcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY() + 1;
|
||||||
@ -55,8 +55,8 @@ namespace PolyVox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType>
|
template< typename SrcVolumeType, typename DestVolumeType>
|
||||||
void VolumeResampler<SrcVolumeType, DestVolumeType, VoxelType>::resampleSameSize()
|
void VolumeResampler<SrcVolumeType, DestVolumeType>::resampleSameSize()
|
||||||
{
|
{
|
||||||
for(int32_t sz = m_regSrc.getLowerCorner().getZ(), dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); sz++, dz++)
|
for(int32_t sz = m_regSrc.getLowerCorner().getZ(), dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); sz++, dz++)
|
||||||
{
|
{
|
||||||
@ -64,15 +64,16 @@ namespace PolyVox
|
|||||||
{
|
{
|
||||||
for(int32_t sx = m_regSrc.getLowerCorner().getX(), dx = m_regDst.getLowerCorner().getX(); dx <= m_regDst.getUpperCorner().getX(); sx++,dx++)
|
for(int32_t sx = m_regSrc.getLowerCorner().getX(), dx = m_regDst.getLowerCorner().getX(); dx <= m_regDst.getUpperCorner().getX(); sx++,dx++)
|
||||||
{
|
{
|
||||||
VoxelType voxel = m_pVolSrc->getVoxelAt(sx,sy,sz);
|
//Note: Consider what should happen if src and dest have different voxel types.
|
||||||
|
SrcVolumeType::VoxelType voxel = m_pVolSrc->getVoxelAt(sx,sy,sz);
|
||||||
m_pVolDst->setVoxelAt(dx,dy,dz,voxel);
|
m_pVolDst->setVoxelAt(dx,dy,dz,voxel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType>
|
template< typename SrcVolumeType, typename DestVolumeType>
|
||||||
void VolumeResampler<SrcVolumeType, DestVolumeType, VoxelType>::resampleArbitrary()
|
void VolumeResampler<SrcVolumeType, DestVolumeType>::resampleArbitrary()
|
||||||
{
|
{
|
||||||
float srcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX();
|
float srcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX();
|
||||||
float srcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY();
|
float srcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY();
|
||||||
@ -86,7 +87,7 @@ namespace PolyVox
|
|||||||
float fScaleY = srcHeight / dstHeight;
|
float fScaleY = srcHeight / dstHeight;
|
||||||
float fScaleZ = srcDepth / dstDepth;
|
float fScaleZ = srcDepth / dstDepth;
|
||||||
|
|
||||||
typename SrcVolumeType<VoxelType>::Sampler sampler(m_pVolSrc);
|
typename SrcVolumeType::Sampler sampler(m_pVolSrc);
|
||||||
|
|
||||||
for(int32_t dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); dz++)
|
for(int32_t dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); dz++)
|
||||||
{
|
{
|
||||||
@ -103,23 +104,23 @@ namespace PolyVox
|
|||||||
sz += m_regSrc.getLowerCorner().getZ();
|
sz += m_regSrc.getLowerCorner().getZ();
|
||||||
|
|
||||||
sampler.setPosition(sx,sy,sz);
|
sampler.setPosition(sx,sy,sz);
|
||||||
VoxelType voxel000 = sampler.peekVoxel0px0py0pz();
|
SrcVolumeType::VoxelType voxel000 = sampler.peekVoxel0px0py0pz();
|
||||||
VoxelType voxel001 = sampler.peekVoxel0px0py1pz();
|
SrcVolumeType::VoxelType voxel001 = sampler.peekVoxel0px0py1pz();
|
||||||
VoxelType voxel010 = sampler.peekVoxel0px1py0pz();
|
SrcVolumeType::VoxelType voxel010 = sampler.peekVoxel0px1py0pz();
|
||||||
VoxelType voxel011 = sampler.peekVoxel0px1py1pz();
|
SrcVolumeType::VoxelType voxel011 = sampler.peekVoxel0px1py1pz();
|
||||||
VoxelType voxel100 = sampler.peekVoxel1px0py0pz();
|
SrcVolumeType::VoxelType voxel100 = sampler.peekVoxel1px0py0pz();
|
||||||
VoxelType voxel101 = sampler.peekVoxel1px0py1pz();
|
SrcVolumeType::VoxelType voxel101 = sampler.peekVoxel1px0py1pz();
|
||||||
VoxelType voxel110 = sampler.peekVoxel1px1py0pz();
|
SrcVolumeType::VoxelType voxel110 = sampler.peekVoxel1px1py0pz();
|
||||||
VoxelType voxel111 = sampler.peekVoxel1px1py1pz();
|
SrcVolumeType::VoxelType voxel111 = sampler.peekVoxel1px1py1pz();
|
||||||
|
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel000Den = convertToDensity(voxel000);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel000Den = convertToDensity(voxel000);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel001Den = convertToDensity(voxel001);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel001Den = convertToDensity(voxel001);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel010Den = convertToDensity(voxel010);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel010Den = convertToDensity(voxel010);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel011Den = convertToDensity(voxel011);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel011Den = convertToDensity(voxel011);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel100Den = convertToDensity(voxel100);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel100Den = convertToDensity(voxel100);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel101Den = convertToDensity(voxel101);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel101Den = convertToDensity(voxel101);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel110Den = convertToDensity(voxel110);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel110Den = convertToDensity(voxel110);
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType voxel111Den = convertToDensity(voxel111);
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType voxel111Den = convertToDensity(voxel111);
|
||||||
|
|
||||||
//FIXME - should accept all float parameters, but GCC complains?
|
//FIXME - should accept all float parameters, but GCC complains?
|
||||||
double dummy;
|
double dummy;
|
||||||
@ -127,9 +128,11 @@ namespace PolyVox
|
|||||||
sy = modf(sy, &dummy);
|
sy = modf(sy, &dummy);
|
||||||
sz = modf(sz, &dummy);
|
sz = modf(sz, &dummy);
|
||||||
|
|
||||||
typename VoxelTypeTraits<VoxelType>::DensityType uInterpolatedDensity = trilinearlyInterpolate<float>(voxel000Den,voxel100Den,voxel010Den,voxel110Den,voxel001Den,voxel101Den,voxel011Den,voxel111Den,sx,sy,sz);
|
//Note: Consider what should happen if src and dest have different voxel types.
|
||||||
|
typename VoxelTypeTraits<SrcVolumeType::VoxelType>::DensityType uInterpolatedDensity = trilinearlyInterpolate<float>(voxel000Den,voxel100Den,voxel010Den,voxel110Den,voxel001Den,voxel101Den,voxel011Den,voxel111Den,sx,sy,sz);
|
||||||
|
|
||||||
VoxelType result;
|
//Note: Consider what should happen if src and dest have different voxel types.
|
||||||
|
DestVolumeType::VoxelType result;
|
||||||
//result.setDensity(uInterpolatedDensity);
|
//result.setDensity(uInterpolatedDensity);
|
||||||
result = uInterpolatedDensity;
|
result = uInterpolatedDensity;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user