From 156bcef9c08574611bacd5ef1011ced40d825d69 Mon Sep 17 00:00:00 2001 From: David Williams Date: Tue, 19 Jan 2016 23:16:02 +0000 Subject: [PATCH] Added files which were accidently removed from repository. --- include/PolyVox/Impl/Interpolation.h | 73 +++++++++++++++++++++ include/PolyVox/Impl/IteratorController.h | 48 ++++++++++++++ include/PolyVox/Impl/IteratorController.inl | 64 ++++++++++++++++++ 3 files changed, 185 insertions(+) create mode 100644 include/PolyVox/Impl/Interpolation.h create mode 100644 include/PolyVox/Impl/IteratorController.h create mode 100644 include/PolyVox/Impl/IteratorController.inl diff --git a/include/PolyVox/Impl/Interpolation.h b/include/PolyVox/Impl/Interpolation.h new file mode 100644 index 00000000..c01865e1 --- /dev/null +++ b/include/PolyVox/Impl/Interpolation.h @@ -0,0 +1,73 @@ +/******************************************************************************* +* The MIT License (MIT) +* +* Copyright (c) 2015 David Williams and Matthew Williams +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*******************************************************************************/ + +#ifndef __PolyVox_Interpolation_H__ +#define __PolyVox_Interpolation_H__ + +namespace PolyVox +{ + template + Type lerp( + const Type& v0, const Type& v1, + const float x) + { + //Interpolate along X + Type v0_1 = (v1 - v0) * x + v0; + + return v0_1; + } + + template + Type bilerp( + const Type& v00, const Type& v10, const Type& v01, const Type& v11, + const float x, const float y) + { + // Linearly interpolate along x + Type v00_10 = lerp(v00, v10, x); + Type v01_11 = lerp(v01, v11, x); + + // And linearly interpolate the results along y + Type v00_10__v01_11 = lerp(v00_10, v01_11, y); + + return v00_10__v01_11; + } + + template + Type trilerp( + const Type& v000, const Type& v100, const Type& v010, const Type& v110, + const Type& v001, const Type& v101, const Type& v011, const Type& v111, + const float x, const float y, const float z) + { + // Bilinearly interpolate along Y + Type v000_v100__v010_v110 = bilerp(v000, v100, v010, v110, x, y); + Type v001_v101__v011_v111 = bilerp(v001, v101, v011, v111, x, y); + + // And linearly interpolate the results along z + Type v000_v100__v010_v110____v001_v101__v011_v111 = lerp(v000_v100__v010_v110, v001_v101__v011_v111, z); + + return v000_v100__v010_v110____v001_v101__v011_v111; + } +} + +#endif //__PolyVox_Interpolation_H__ diff --git a/include/PolyVox/Impl/IteratorController.h b/include/PolyVox/Impl/IteratorController.h new file mode 100644 index 00000000..e614016d --- /dev/null +++ b/include/PolyVox/Impl/IteratorController.h @@ -0,0 +1,48 @@ +/******************************************************************************* +* The MIT License (MIT) +* +* Copyright (c) 2015 David Williams and Matthew Williams +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*******************************************************************************/ + +#ifndef __PolyVox_IteratorController_H__ +#define __PolyVox_IteratorController_H__ + +#include "Region.h" + +namespace PolyVox +{ + /// Unfinished class/feature, not appropriate for end user at the moment. + template + class IteratorController + { + public: + void reset(void); + bool moveForward(void); + + public: + Region m_regValid; + IteratorType* m_Iter; + }; +} + +#include "Impl/IteratorController.inl" + +#endif //__PolyVox_IteratorController_H__ diff --git a/include/PolyVox/Impl/IteratorController.inl b/include/PolyVox/Impl/IteratorController.inl new file mode 100644 index 00000000..b3d01dbc --- /dev/null +++ b/include/PolyVox/Impl/IteratorController.inl @@ -0,0 +1,64 @@ +/******************************************************************************* +* The MIT License (MIT) +* +* Copyright (c) 2015 David Williams and Matthew Williams +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*******************************************************************************/ + +namespace PolyVox +{ + template + void IteratorController::reset(void) + { + m_Iter->setPosition(m_regValid.getLowerCorner()); + } + + template + bool IteratorController::moveForward(void) + { + Vector3DInt32 v3dInitialPosition(m_Iter->getPosition().getX(), m_Iter->getPosition().getY(), m_Iter->getPosition().getZ()); + + if (v3dInitialPosition.getX() < m_regValid.getUpperX()) + { + m_Iter->movePositiveX(); + return true; + } + + v3dInitialPosition.setX(m_regValid.getLowerX()); + + if (v3dInitialPosition.getY() < m_regValid.getUpperY()) + { + v3dInitialPosition.setY(v3dInitialPosition.getY() + 1); + m_Iter->setPosition(v3dInitialPosition); + return true; + } + + v3dInitialPosition.setY(m_regValid.getLowerY()); + + if (v3dInitialPosition.getZ() < m_regValid.getUpperZ()) + { + v3dInitialPosition.setZ(v3dInitialPosition.getZ() + 1); + m_Iter->setPosition(v3dInitialPosition); + return true; + } + + return false; + } +}