From f9250a778bf0c272a212c9b5c1aaa6cceb5651a9 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 2 Dec 2012 08:59:48 +0100 Subject: [PATCH] Made SimpleVolumeSampler support wrap modes. --- .../PolyVoxCore/SimpleVolumeSampler.inl | 170 ++++++++++-------- 1 file changed, 98 insertions(+), 72 deletions(-) diff --git a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeSampler.inl b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeSampler.inl index 83a663e7..074581e9 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeSampler.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/SimpleVolumeSampler.inl @@ -101,7 +101,14 @@ namespace PolyVox template VoxelType SimpleVolume::Sampler::getVoxel(void) const { - return *mCurrentVoxel; + if(isCurrentPositionValid()) + { + return *mCurrentVoxel; + } + else + { + return getVoxelAt(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume); + } } /** @@ -121,10 +128,10 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::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; @@ -161,10 +168,7 @@ namespace PolyVox template bool SimpleVolume::Sampler::setVoxel(VoxelType tValue) { - VoxelType* pBorderDataEndPlusOne = this->mVolume->m_pUncompressedBorderData + this->mVolume->m_uNoOfVoxelsPerBlock; - - //Make sure we're not trying to write to the border data - if((mCurrentVoxel < this->mVolume->m_pUncompressedBorderData) || (mCurrentVoxel >= pBorderDataEndPlusOne)) + if(m_bIsCurrentPositionValidInX && m_bIsCurrentPositionValidInY && m_bIsCurrentPositionValidInZ) { *mCurrentVoxel = tValue; return true; @@ -178,8 +182,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::movePositiveX(); + + // Then we update the voxel pointer + if((this->mXPosInVolume) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. ++mCurrentVoxel; @@ -194,8 +201,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::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; @@ -210,8 +220,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::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; @@ -226,8 +239,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::moveNegativeX(); + + // Then we update the voxel pointer + if((this->mXPosInVolume + 1) % this->mVolume->m_uBlockSideLength != 0) { //No need to compute new block. --mCurrentVoxel; @@ -242,8 +258,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::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; @@ -258,8 +277,11 @@ namespace PolyVox template void SimpleVolume::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< SimpleVolume >::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; @@ -274,91 +296,91 @@ namespace PolyVox template VoxelType SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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); } ////////////////////////////////////////////////////////////////////////// @@ -366,87 +388,91 @@ namespace PolyVox template VoxelType SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::Sampler::peekVoxel0px0py0pz(void) const { + if((this->isCurrentPositionValid())) + { return *mCurrentVoxel; + } + return this->getVoxelAt(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume); } template VoxelType SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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); } ////////////////////////////////////////////////////////////////////////// @@ -454,91 +480,91 @@ namespace PolyVox template VoxelType SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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 SimpleVolume::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); } }