From e8b3fd16e24434f3f810eb2bbb4530251f1e4578 Mon Sep 17 00:00:00 2001 From: David Williams Date: Mon, 15 Aug 2011 21:31:52 +0100 Subject: [PATCH] Initial version of IteratorController and making LowPassFilter use iterators. --- library/PolyVoxCore/CMakeLists.txt | 2 ++ .../include/PolyVoxCore/LowPassFilter.inl | 31 +++++++++++++++++-- tests/TestLowPassFilter.cpp | 4 +++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/library/PolyVoxCore/CMakeLists.txt b/library/PolyVoxCore/CMakeLists.txt index eb848533..b5d63110 100644 --- a/library/PolyVoxCore/CMakeLists.txt +++ b/library/PolyVoxCore/CMakeLists.txt @@ -31,6 +31,8 @@ SET(CORE_INC_FILES include/PolyVoxCore/Density.h include/PolyVoxCore/GradientEstimators.h include/PolyVoxCore/GradientEstimators.inl + include/PolyVoxCore/IteratorController.h + include/PolyVoxCore/IteratorController.inl include/PolyVoxCore/LargeVolume.h include/PolyVoxCore/LargeVolume.inl include/PolyVoxCore/LargeVolumeSampler.inl diff --git a/library/PolyVoxCore/include/PolyVoxCore/LowPassFilter.inl b/library/PolyVoxCore/include/PolyVoxCore/LowPassFilter.inl index 1c8c1a5a..affa90f2 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LowPassFilter.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/LowPassFilter.inl @@ -21,6 +21,7 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ +#include "PolyVoxCore/IteratorController.h" #include "PolyVoxCore/RawVolume.h" namespace PolyVox @@ -139,8 +140,34 @@ namespace PolyVox } } + RawVolume::Sampler satVolumeIter(&satVolume); + + IteratorController::Sampler> satIterCont; + satIterCont.m_regValid = Region(satLowerCorner, satUpperCorner); + satIterCont.m_Iter = &satVolumeIter; + satIterCont.reset(); + + SrcVolumeType::Sampler srcVolumeIter(m_pVolSrc); + + IteratorController::Sampler> srcIterCont; + srcIterCont.m_regValid = Region(satLowerCorner, satUpperCorner); + srcIterCont.m_Iter = &srcVolumeIter; + srcIterCont.reset(); + + do + { + uint32_t previousSum = satVolumeIter.peekVoxel1nx0py0pz(); + + uint32_t currentVal = srcVolumeIter.getVoxel().getDensity(); + + satVolumeIter.setVoxel(previousSum + currentVal); + + srcIterCont.moveForward(); + + }while(satIterCont.moveForward()); + //Build SAT in three passes - for(int32_t z = satLowerCorner.getZ(); z <= satUpperCorner.getZ(); z++) + /*for(int32_t z = satLowerCorner.getZ(); z <= satUpperCorner.getZ(); z++) { for(int32_t y = satLowerCorner.getY(); y <= satUpperCorner.getY(); y++) { @@ -152,7 +179,7 @@ namespace PolyVox satVolume.setVoxelAt(x,y,z,previousSum + currentVal); } } - } + }*/ for(int32_t z = satLowerCorner.getZ(); z <= satUpperCorner.getZ(); z++) { diff --git a/tests/TestLowPassFilter.cpp b/tests/TestLowPassFilter.cpp index 604b12fd..f4129253 100644 --- a/tests/TestLowPassFilter.cpp +++ b/tests/TestLowPassFilter.cpp @@ -61,6 +61,10 @@ void TestLowPassFilter::testExecute() LowPassFilter pass1(&volData, reg, &resultVolume, reg, 5); pass1.executeSAT(); + + std::cout << "Voxel = " << static_cast(resultVolume.getVoxelAt(1,2,3).getDensity()) << std::endl; // 7 + std::cout << "Voxel = " << static_cast(resultVolume.getVoxelAt(10,6,7).getDensity()) << std::endl; // 17 + std::cout << "Voxel = " << static_cast(resultVolume.getVoxelAt(15,2,12).getDensity()) << std::endl; // 4 } QTEST_MAIN(TestLowPassFilter)