From 597b28d271ecc5e3def52137e378d23afb786c5e Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 2 Dec 2012 13:57:08 +0100 Subject: [PATCH] Support for wrap modes in LargeVolumeSampler --- .../include/PolyVoxCore/Impl/Utility.h | 2 +- .../PolyVoxCore/LargeVolumeSampler.inl | 176 +++++++++++------- 2 files changed, 108 insertions(+), 70 deletions(-) diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/Utility.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/Utility.h index 73fa2b50..2053c351 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/Impl/Utility.h +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/Utility.h @@ -51,7 +51,7 @@ namespace PolyVox template inline Type clamp(const Type& value, const Type& low, const Type& high) { - return std::min(high, std::max(low, value)); + return (std::min)(high, (std::max)(low, value)); } } diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl b/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl index 69fef2a3..63b1270c 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl @@ -95,7 +95,14 @@ namespace PolyVox template VoxelType LargeVolume::Sampler::getVoxel(void) const { - return *mCurrentVoxel; + if(isCurrentPositionValid()) + { + return *mCurrentVoxel; + } + else + { + return getVoxelAt(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume); + } } template @@ -107,10 +114,10 @@ namespace PolyVox template void LargeVolume::Sampler::setPosition(int32_t xPos, int32_t yPos, int32_t zPos) { - this->mXPosInVolume = xPos; - this->mYPosInVolume = yPos; - this->mZPosInVolume = zPos; + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::setPosition(xPos, yPos, zPos); + // Then we update the voxel pointer const int32_t uXBlock = this->mXPosInVolume >> this->mVolume->m_uBlockSideLengthPower; const int32_t uYBlock = this->mYPosInVolume >> this->mVolume->m_uBlockSideLengthPower; const int32_t uZBlock = this->mZPosInVolume >> this->mVolume->m_uBlockSideLengthPower; @@ -138,7 +145,16 @@ namespace PolyVox template bool LargeVolume::Sampler::setVoxel(VoxelType tValue) { - //*mCurrentVoxel = tValue; + /*if(m_bIsCurrentPositionValidInX && m_bIsCurrentPositionValidInY && m_bIsCurrentPositionValidInZ) + { + *mCurrentVoxel = tValue; + return true; + } + else + { + return false; + }*/ + //Need to think what effect this has on any existing iterators. assert(false); return false; @@ -147,8 +163,11 @@ namespace PolyVox template void LargeVolume::Sampler::movePositiveX(void) { - //Note the *pre* increament here - if((++this->mXPosInVolume) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::movePositiveX(); + + // Then we update the voxel pointer + if((this->mXPosInVolume) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. ++mCurrentVoxel; @@ -163,8 +182,11 @@ namespace PolyVox template void LargeVolume::Sampler::movePositiveY(void) { - //Note the *pre* increament here - if((++this->mYPosInVolume) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::movePositiveY(); + + // Then we update the voxel pointer + if((this->mYPosInVolume) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. mCurrentVoxel += this->mVolume->m_uBlockSideLength; @@ -179,8 +201,11 @@ namespace PolyVox template void LargeVolume::Sampler::movePositiveZ(void) { - //Note the *pre* increament here - if((++this->mZPosInVolume) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::movePositiveZ(); + + // Then we update the voxel pointer + if((this->mZPosInVolume) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. mCurrentVoxel += this->mVolume->m_uBlockSideLength * this->mVolume->m_uBlockSideLength; @@ -195,8 +220,11 @@ namespace PolyVox template void LargeVolume::Sampler::moveNegativeX(void) { - //Note the *post* decreament here - if((this->mXPosInVolume--) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::moveNegativeX(); + + // Then we update the voxel pointer + if((this->mXPosInVolume + 1) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. --mCurrentVoxel; @@ -211,8 +239,11 @@ namespace PolyVox template void LargeVolume::Sampler::moveNegativeY(void) { - //Note the *post* decreament here - if((this->mYPosInVolume--) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::moveNegativeY(); + + // Then we update the voxel pointer + if((this->mYPosInVolume + 1) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. mCurrentVoxel -= this->mVolume->m_uBlockSideLength; @@ -227,8 +258,11 @@ namespace PolyVox template void LargeVolume::Sampler::moveNegativeZ(void) { - //Note the *post* decreament here - if((this->mZPosInVolume--) % this->mVolume->m_uBlockSideLength != 0) + // Base version updates position and validity flags. + BaseVolume::Sampler< LargeVolume >::moveNegativeZ(); + + // Then we update the voxel pointer + if((this->mZPosInVolume + 1) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. mCurrentVoxel -= this->mVolume->m_uBlockSideLength * this->mVolume->m_uBlockSideLength; @@ -243,91 +277,91 @@ namespace PolyVox template VoxelType LargeVolume::Sampler::peekVoxel1nx1ny1nz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 - this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1nx1ny0pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) ) { return *(mCurrentVoxel - 1 - this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1nx1ny1pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 - this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel1nx0py1nz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1nx0py0pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) ) { return *(mCurrentVoxel - 1); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1nx0py1pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel1nx1py1nz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 + this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1nx1py0pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) ) { return *(mCurrentVoxel - 1 + this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1nx1py1pz(void) const { - if( BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel - 1 + this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume+1); } ////////////////////////////////////////////////////////////////////////// @@ -335,87 +369,91 @@ namespace PolyVox template VoxelType LargeVolume::Sampler::peekVoxel0px1ny1nz(void) const { - if( BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel - this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel0px1ny0pz(void) const { - if( BORDER_LOW(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mYPosInVolume) ) { return *(mCurrentVoxel - this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel0px1ny1pz(void) const { - if( BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel - this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel0px0py1nz(void) const { - if( BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel0px0py0pz(void) const { + if((this->isCurrentPositionValid())) + { return *mCurrentVoxel; + } + return this->getVoxelAt(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel0px0py1pz(void) const { - if( BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel0px1py1nz(void) const { - if( BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel + this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel0px1py0pz(void) const { - if( BORDER_HIGH(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mYPosInVolume) ) { return *(mCurrentVoxel + this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel0px1py1pz(void) const { - if( BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel + this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume+1); } ////////////////////////////////////////////////////////////////////////// @@ -423,91 +461,91 @@ namespace PolyVox template VoxelType LargeVolume::Sampler::peekVoxel1px1ny1nz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 - this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1px1ny0pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) ) { return *(mCurrentVoxel + 1 - this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1px1ny1pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 - this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel1px0py1nz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1px0py0pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) ) { return *(mCurrentVoxel + 1); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1px0py1pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume+1); } template VoxelType LargeVolume::Sampler::peekVoxel1px1py1nz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_LOW(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 + this->mVolume->m_uBlockSideLength - this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume-1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume-1); } template VoxelType LargeVolume::Sampler::peekVoxel1px1py0pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) ) { return *(mCurrentVoxel + 1 + this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume); } template VoxelType LargeVolume::Sampler::peekVoxel1px1py1pz(void) const { - if( BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) + if((this->isCurrentPositionValid()) && BORDER_HIGH(this->mXPosInVolume) && BORDER_HIGH(this->mYPosInVolume) && BORDER_HIGH(this->mZPosInVolume) ) { return *(mCurrentVoxel + 1 + this->mVolume->m_uBlockSideLength + this->mVolume->m_uBlockSideLength*this->mVolume->m_uBlockSideLength); } - return this->mVolume->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume+1); + return this->getVoxelAt(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume+1); } }