Optimisations to VolumeResampler
This commit is contained in:
parent
b7cb97513d
commit
c7fa6552ae
@ -80,32 +80,44 @@ namespace PolyVox
|
|||||||
float dstHeight = m_regDst.getUpperCorner().getY() - m_regDst.getLowerCorner().getY();
|
float dstHeight = m_regDst.getUpperCorner().getY() - m_regDst.getLowerCorner().getY();
|
||||||
float dstDepth = m_regDst.getUpperCorner().getZ() - m_regDst.getLowerCorner().getZ();
|
float dstDepth = m_regDst.getUpperCorner().getZ() - m_regDst.getLowerCorner().getZ();
|
||||||
|
|
||||||
|
float fScaleX = srcWidth / dstWidth;
|
||||||
|
float fScaleY = srcHeight / dstHeight;
|
||||||
|
float fScaleZ = srcDepth / dstDepth;
|
||||||
|
|
||||||
|
SrcVolumeType<VoxelType>::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++)
|
||||||
{
|
{
|
||||||
for(int32_t dy = m_regDst.getLowerCorner().getY(); dy <= m_regDst.getUpperCorner().getY(); dy++)
|
for(int32_t dy = m_regDst.getLowerCorner().getY(); dy <= m_regDst.getUpperCorner().getY(); dy++)
|
||||||
{
|
{
|
||||||
for(int32_t dx = m_regDst.getLowerCorner().getX(); dx <= m_regDst.getUpperCorner().getX(); dx++)
|
for(int32_t dx = m_regDst.getLowerCorner().getX(); dx <= m_regDst.getUpperCorner().getX(); dx++)
|
||||||
{
|
{
|
||||||
float sx = (dx - m_regDst.getLowerCorner().getX()) / dstWidth;
|
float sx = (dx - m_regDst.getLowerCorner().getX()) * fScaleX;
|
||||||
float sy = (dy - m_regDst.getLowerCorner().getY()) / dstHeight;
|
float sy = (dy - m_regDst.getLowerCorner().getY()) * fScaleY;
|
||||||
float sz = (dz - m_regDst.getLowerCorner().getZ()) / dstDepth;
|
float sz = (dz - m_regDst.getLowerCorner().getZ()) * fScaleZ;
|
||||||
|
|
||||||
sx *= srcWidth;
|
|
||||||
sy *= srcHeight;
|
|
||||||
sz *= srcDepth;
|
|
||||||
|
|
||||||
sx += m_regSrc.getLowerCorner().getX();
|
sx += m_regSrc.getLowerCorner().getX();
|
||||||
sy += m_regSrc.getLowerCorner().getY();
|
sy += m_regSrc.getLowerCorner().getY();
|
||||||
sz += m_regSrc.getLowerCorner().getZ();
|
sz += m_regSrc.getLowerCorner().getZ();
|
||||||
|
|
||||||
VoxelType voxel000 = m_pVolSrc->getVoxelAt(sx+0,sy+0,sz+0);
|
/*VoxelType voxel000 = m_pVolSrc->getVoxelAt(sx+0,sy+0,sz+0);
|
||||||
VoxelType voxel001 = m_pVolSrc->getVoxelAt(sx+0,sy+0,sz+1);
|
VoxelType voxel001 = m_pVolSrc->getVoxelAt(sx+0,sy+0,sz+1);
|
||||||
VoxelType voxel010 = m_pVolSrc->getVoxelAt(sx+0,sy+1,sz+0);
|
VoxelType voxel010 = m_pVolSrc->getVoxelAt(sx+0,sy+1,sz+0);
|
||||||
VoxelType voxel011 = m_pVolSrc->getVoxelAt(sx+0,sy+1,sz+1);
|
VoxelType voxel011 = m_pVolSrc->getVoxelAt(sx+0,sy+1,sz+1);
|
||||||
VoxelType voxel100 = m_pVolSrc->getVoxelAt(sx+1,sy+0,sz+0);
|
VoxelType voxel100 = m_pVolSrc->getVoxelAt(sx+1,sy+0,sz+0);
|
||||||
VoxelType voxel101 = m_pVolSrc->getVoxelAt(sx+1,sy+0,sz+1);
|
VoxelType voxel101 = m_pVolSrc->getVoxelAt(sx+1,sy+0,sz+1);
|
||||||
VoxelType voxel110 = m_pVolSrc->getVoxelAt(sx+1,sy+1,sz+0);
|
VoxelType voxel110 = m_pVolSrc->getVoxelAt(sx+1,sy+1,sz+0);
|
||||||
VoxelType voxel111 = m_pVolSrc->getVoxelAt(sx+1,sy+1,sz+1);
|
VoxelType voxel111 = m_pVolSrc->getVoxelAt(sx+1,sy+1,sz+1);*/
|
||||||
|
|
||||||
|
sampler.setPosition(sx,sy,sz);
|
||||||
|
VoxelType voxel000 = sampler.peekVoxel0px0py0pz();
|
||||||
|
VoxelType voxel001 = sampler.peekVoxel0px0py1pz();
|
||||||
|
VoxelType voxel010 = sampler.peekVoxel0px1py0pz();
|
||||||
|
VoxelType voxel011 = sampler.peekVoxel0px1py1pz();
|
||||||
|
VoxelType voxel100 = sampler.peekVoxel1px0py0pz();
|
||||||
|
VoxelType voxel101 = sampler.peekVoxel1px0py1pz();
|
||||||
|
VoxelType voxel110 = sampler.peekVoxel1px1py0pz();
|
||||||
|
VoxelType voxel111 = sampler.peekVoxel1px1py1pz();
|
||||||
|
|
||||||
uint8_t voxel000Den = voxel000.getDensity();
|
uint8_t voxel000Den = voxel000.getDensity();
|
||||||
uint8_t voxel001Den = voxel001.getDensity();
|
uint8_t voxel001Den = voxel001.getDensity();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user