From 6d656ad1730a888082910c0ac7cf1d05516c5dec Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 27 Mar 2012 14:21:43 +0200 Subject: [PATCH] Work on voxel refactoring... --- .../PolyVoxCore/AmbientOcclusionCalculator.h | 9 ++++++--- .../PolyVoxCore/AmbientOcclusionCalculator.inl | 14 ++++++++------ tests/TestAmbientOcclusionGenerator.cpp | 7 ++++++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.h b/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.h index 156601ee..4c4ea164 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.h +++ b/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.h @@ -43,15 +43,18 @@ namespace PolyVox class AmbientOcclusionCalculator { public: - AmbientOcclusionCalculator(VolumeType* volInput, Array<3, uint8_t>* arrayResult, Region region, float fRayLength, uint8_t uNoOfSamplesPerOutputElement/*, polyvox_function funcIsTransparent*/); + AmbientOcclusionCalculator(VolumeType* volInput, Array<3, uint8_t>* arrayResult, Region region, float fRayLength, uint8_t uNoOfSamplesPerOutputElement, polyvox_function funcIsTransparent); ~AmbientOcclusionCalculator(); void execute(void); private: - //bool raycastCallback(const typename VolumeType::Sampler& sampler); - bool raycastCallback(const typename SimpleVolume::Sampler& sampler); +#if defined(_MSC_VER) //FIXME: To be investigated. Linux version is more general and should be correct. + bool raycastCallback(const typename SimpleVolume::Sampler& sampler); +#else + bool raycastCallback(const typename VolumeType::Sampler& sampler); +#endif Region m_region; typename VolumeType::Sampler m_sampVolume; diff --git a/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.inl b/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.inl index e80b3911..a38ce720 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/AmbientOcclusionCalculator.inl @@ -24,7 +24,7 @@ freely, subject to the following restrictions: namespace PolyVox { template< template class VolumeType, typename VoxelType> - AmbientOcclusionCalculator::AmbientOcclusionCalculator(VolumeType* volInput, Array<3, uint8_t>* arrayResult, Region region, float fRayLength, uint8_t uNoOfSamplesPerOutputElement/*, polyvox_function funcIsTransparent*/) + AmbientOcclusionCalculator::AmbientOcclusionCalculator(VolumeType* volInput, Array<3, uint8_t>* arrayResult, Region region, float fRayLength, uint8_t uNoOfSamplesPerOutputElement, polyvox_function funcIsTransparent) :m_region(region) ,m_sampVolume(volInput) ,m_volInput(volInput) @@ -33,7 +33,7 @@ namespace PolyVox ,m_uNoOfSamplesPerOutputElement(uNoOfSamplesPerOutputElement) ,mRandomUnitVectorIndex(0) //Although these could be uninitialised, we ,mRandomVectorIndex(0) //initialise for consistant results in the tests. - //,m_funcIsTransparent(funcIsTransparent) + ,m_funcIsTransparent(funcIsTransparent) { //Make sure that the size of the volume is an exact multiple of the size of the array. assert(m_volInput->getWidth() % arrayResult->getDimension(0) == 0); @@ -134,11 +134,13 @@ namespace PolyVox } template< template class VolumeType, typename VoxelType> - //bool AmbientOcclusionCalculator::raycastCallback(const typename VolumeType::Sampler& sampler) +#if defined(_MSC_VER) bool AmbientOcclusionCalculator::raycastCallback(const typename SimpleVolume::Sampler& sampler) +#else + bool AmbientOcclusionCalculator::raycastCallback(const typename VolumeType::Sampler& sampler) +#endif { - //VoxelType voxel = sampler.getVoxel(); - //return m_funcIsTransparent(voxel); - return sampler.getVoxel().getMaterial() == 0; + VoxelType voxel = sampler.getVoxel(); + return m_funcIsTransparent(voxel); } } diff --git a/tests/TestAmbientOcclusionGenerator.cpp b/tests/TestAmbientOcclusionGenerator.cpp index 6c2398cc..4e192030 100644 --- a/tests/TestAmbientOcclusionGenerator.cpp +++ b/tests/TestAmbientOcclusionGenerator.cpp @@ -31,6 +31,11 @@ freely, subject to the following restrictions: using namespace PolyVox; +bool isVoxelTransparent(Material8 voxel) +{ + return voxel.getMaterial() == 0; +} + void TestAmbientOcclusionGenerator::testExecute() { const int32_t g_uVolumeSideLength = 64; @@ -59,7 +64,7 @@ void TestAmbientOcclusionGenerator::testExecute() Array<3, uint8_t> ambientOcclusionResult(ArraySizes(g_uArraySideLength)(g_uArraySideLength)(g_uArraySideLength)); //Create the ambient occlusion calculator - AmbientOcclusionCalculator calculator(&volData, &ambientOcclusionResult, volData.getEnclosingRegion(), 32.0f, 255); + AmbientOcclusionCalculator calculator(&volData, &ambientOcclusionResult, volData.getEnclosingRegion(), 32.0f, 255, isVoxelTransparent); //Execute the calculator calculator.execute();