diff --git a/examples/OpenGL/main.cpp b/examples/OpenGL/main.cpp index f43c60be..f5efa62b 100644 --- a/examples/OpenGL/main.cpp +++ b/examples/OpenGL/main.cpp @@ -154,7 +154,7 @@ void main ( int argc, char** argv ) // Create Main Function For Bringing It Al IndexedSurfacePatch* ispCurrent = g_ispRegionSurfaces[uRegionX][uRegionY][uRegionZ]; Vector3DInt32 regLowerCorner(uRegionX * g_uRegionSideLength, uRegionY * g_uRegionSideLength, uRegionZ * g_uRegionSideLength); Vector3DInt32 regUpperCorner((uRegionX + 1) * g_uRegionSideLength, (uRegionY + 1) * g_uRegionSideLength, (uRegionZ + 1) * g_uRegionSideLength); - generateReferenceMeshDataForRegion(&g_volData, Region(regLowerCorner, regUpperCorner), ispCurrent); + extractReferenceSurface(&g_volData, Region(regLowerCorner, regUpperCorner), ispCurrent); } } } diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 85bfd990..5534878f 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -13,7 +13,6 @@ SET(CORE_SRC_FILES source/PolyVoxCore/IndexedSurfacePatch.cpp source/PolyVoxCore/MarchingCubesTables.cpp source/PolyVoxCore/Region.cpp - source/PolyVoxCore/RegionGeometry.cpp source/PolyVoxCore/SurfaceAdjusters.cpp source/PolyVoxCore/SurfaceExtractors.cpp source/PolyVoxCore/SurfaceVertex.cpp @@ -40,7 +39,6 @@ SET(CORE_INC_FILES include/PolyVoxCore/PolyVoxForwardDeclarations.h include/PolyVoxCore/PolyVoxCStdInt.h include/PolyVoxCore/Region.h - include/PolyVoxCore/RegionGeometry.h include/PolyVoxCore/SurfaceAdjusters.h include/PolyVoxCore/SurfaceExtractors.h include/PolyVoxCore/SurfaceVertex.h diff --git a/library/include/PolyVoxCore/GradientEstimators.h b/library/include/PolyVoxCore/GradientEstimators.h index 8289bbf4..07cbdd3e 100644 --- a/library/include/PolyVoxCore/GradientEstimators.h +++ b/library/include/PolyVoxCore/GradientEstimators.h @@ -40,7 +40,7 @@ namespace PolyVox template Vector3DFloat computeSobelGradient(const BlockVolumeIterator& volIter); - POLYVOX_API void computeNormalsForVertices(BlockVolume* volumeData, RegionGeometry& regGeom, NormalGenerationMethod normalGenerationMethod); + POLYVOX_API void computeNormalsForVertices(BlockVolume* volumeData, IndexedSurfacePatch& isp, NormalGenerationMethod normalGenerationMethod); POLYVOX_API Vector3DFloat computeNormal(BlockVolume* volumeData, const Vector3DFloat& position, NormalGenerationMethod normalGenerationMethod); } diff --git a/library/include/PolyVoxCore/IndexedSurfacePatch.h b/library/include/PolyVoxCore/IndexedSurfacePatch.h index 8058df72..ca7848e6 100644 --- a/library/include/PolyVoxCore/IndexedSurfacePatch.h +++ b/library/include/PolyVoxCore/IndexedSurfacePatch.h @@ -46,8 +46,16 @@ namespace PolyVox std::vector& getVertices(void); //FIXME - non const version should be removed. const std::vector& getIndices(void) const; + const uint32 getNoOfIndices(void) const; + const uint32 getNoOfVertices(void) const; + + const bool isEmpty(void) const; + + unsigned short getNoNonUniformTrianges(void); unsigned short getNoUniformTrianges(void); + + Vector3DInt32 m_v3dRegionPosition; public: std::vector m_vecTriangleIndices; diff --git a/library/include/PolyVoxCore/PolyVoxForwardDeclarations.h b/library/include/PolyVoxCore/PolyVoxForwardDeclarations.h index 1e8afd7b..575e90ad 100644 --- a/library/include/PolyVoxCore/PolyVoxForwardDeclarations.h +++ b/library/include/PolyVoxCore/PolyVoxForwardDeclarations.h @@ -40,7 +40,6 @@ namespace PolyVox class IntegrealVector3; template class LinearVolume; class Region; - class RegionGeometry; class SurfaceVertex; //---------- Vector ---------- diff --git a/library/include/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.h b/library/include/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.h index 85b504f1..a70663ab 100644 --- a/library/include/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.h +++ b/library/include/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.h @@ -34,15 +34,15 @@ namespace PolyVox { uint32 getDecimatedIndex(uint32 x, uint32 y); - POLYVOX_API void generateDecimatedMeshDataForRegionImpl(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch); - POLYVOX_API uint32 computeInitialDecimatedBitmaskForSlice(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask); - POLYVOX_API uint32 computeDecimatedBitmaskForSliceFromPrevious(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask, uint8 *previousBitmask); - POLYVOX_API void generateDecimatedIndicesForSlice(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, uint8* bitmask0, uint8* bitmask1, int32 vertexIndicesX0[],int32 vertexIndicesY0[],int32 vertexIndicesZ0[], int32 vertexIndicesX1[],int32 vertexIndicesY1[],int32 vertexIndicesZ1[]); - POLYVOX_API void generateDecimatedVerticesForSlice(BlockVolumeIterator& volIter, uint8 uLevel, Region& regSlice, const Vector3DFloat& offset, uint8* bitmask, IndexedSurfacePatch* singleMaterialPatch,int32 vertexIndicesX[],int32 vertexIndicesY[],int32 vertexIndicesZ[]); + void extractDecimatedSurfaceImpl(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch); + uint32 computeInitialDecimatedBitmaskForSlice(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask); + uint32 computeDecimatedBitmaskForSliceFromPrevious(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask, uint8 *previousBitmask); + void generateDecimatedIndicesForSlice(BlockVolumeIterator& volIter, uint8 uLevel, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, uint8* bitmask0, uint8* bitmask1, int32 vertexIndicesX0[],int32 vertexIndicesY0[],int32 vertexIndicesZ0[], int32 vertexIndicesX1[],int32 vertexIndicesY1[],int32 vertexIndicesZ1[]); + void generateDecimatedVerticesForSlice(BlockVolumeIterator& volIter, uint8 uLevel, Region& regSlice, const Vector3DFloat& offset, uint8* bitmask, IndexedSurfacePatch* singleMaterialPatch,int32 vertexIndicesX[],int32 vertexIndicesY[],int32 vertexIndicesZ[]); - POLYVOX_API void generateDecimatedMeshDataForRegionSlow(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); + void generateDecimatedMeshDataForRegionSlow(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); - POLYVOX_API Vector3DFloat computeDecimatedNormal(BlockVolume* volumeData, const Vector3DFloat& position, NormalGenerationMethod normalGenerationMethod); + Vector3DFloat computeDecimatedNormal(BlockVolume* volumeData, const Vector3DFloat& position, NormalGenerationMethod normalGenerationMethod); } #endif diff --git a/library/include/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.h b/library/include/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.h index b7bd1456..c4d4419b 100644 --- a/library/include/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.h +++ b/library/include/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.h @@ -32,12 +32,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - POLYVOX_API void generateRoughMeshDataForRegionImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); + void extractFastSurfaceImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); uint32 getIndex(uint32 x, uint32 y); - POLYVOX_API uint32 computeInitialRoughBitmaskForSlice(BlockVolumeIterator& volIter, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask); - POLYVOX_API uint32 computeRoughBitmaskForSliceFromPrevious(BlockVolumeIterator& volIter, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask, uint8 *previousBitmask); - POLYVOX_API void generateRoughIndicesForSlice(BlockVolumeIterator& volIter, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, uint8* bitmask0, uint8* bitmask1, int32 vertexIndicesX0[],int32 vertexIndicesY0[],int32 vertexIndicesZ0[], int32 vertexIndicesX1[],int32 vertexIndicesY1[],int32 vertexIndicesZ1[]); - POLYVOX_API void generateRoughVerticesForSlice(BlockVolumeIterator& volIter, Region& regSlice, const Vector3DFloat& offset, uint8* bitmask, IndexedSurfacePatch* singleMaterialPatch,int32 vertexIndicesX[],int32 vertexIndicesY[],int32 vertexIndicesZ[]); + uint32 computeInitialRoughBitmaskForSlice(BlockVolumeIterator& volIter, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask); + uint32 computeRoughBitmaskForSliceFromPrevious(BlockVolumeIterator& volIter, const Region& regSlice, const Vector3DFloat& offset, uint8 *bitmask, uint8 *previousBitmask); + void generateRoughIndicesForSlice(BlockVolumeIterator& volIter, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, uint8* bitmask0, uint8* bitmask1, int32 vertexIndicesX0[],int32 vertexIndicesY0[],int32 vertexIndicesZ0[], int32 vertexIndicesX1[],int32 vertexIndicesY1[],int32 vertexIndicesZ1[]); + void generateRoughVerticesForSlice(BlockVolumeIterator& volIter, Region& regSlice, const Vector3DFloat& offset, uint8* bitmask, IndexedSurfacePatch* singleMaterialPatch,int32 vertexIndicesX[],int32 vertexIndicesY[],int32 vertexIndicesZ[]); } #endif diff --git a/library/include/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.h b/library/include/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.h index 92f87caf..bbccc3b8 100644 --- a/library/include/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.h +++ b/library/include/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.h @@ -32,7 +32,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - POLYVOX_API void generateReferenceMeshDataForRegionImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); + void extractReferenceSurfaceImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); int32 getIndexFor(const Vector3DFloat& pos, int32 vertexIndicesX[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1], int32 vertexIndicesY[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1], int32 vertexIndicesZ[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1]); void setIndexFor(const Vector3DFloat& pos, int32 newIndex, int32 vertexIndicesX[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1], int32 vertexIndicesY[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1], int32 vertexIndicesZ[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1]); } diff --git a/library/include/PolyVoxCore/RegionGeometry.h b/library/include/PolyVoxCore/RegionGeometry.h deleted file mode 100644 index 78d43715..00000000 --- a/library/include/PolyVoxCore/RegionGeometry.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma region License -/****************************************************************************** -This file is part of the PolyVox library -Copyright (C) 2006 David Williams - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -******************************************************************************/ -#pragma endregion - -#ifndef __PolyVox_RegionGeometry_H__ -#define __PolyVox_RegionGeometry_H__ - -#include "PolyVoxForwardDeclarations.h" -#include "TypeDef.h" -#include "Vector.h" - -namespace PolyVox -{ - class POLYVOX_API RegionGeometry - { - public: - RegionGeometry(); - - bool m_bIsEmpty; - bool m_bContainsSingleMaterialPatch; - - Vector3DInt32 m_v3dRegionPosition; - IndexedSurfacePatch* m_patchSingleMaterial; - }; -} - -#endif diff --git a/library/include/PolyVoxCore/SurfaceAdjusters.h b/library/include/PolyVoxCore/SurfaceAdjusters.h index 39561947..153a5ad1 100644 --- a/library/include/PolyVoxCore/SurfaceAdjusters.h +++ b/library/include/PolyVoxCore/SurfaceAdjusters.h @@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - POLYVOX_API void smoothRegionGeometry(BlockVolume* volumeData, RegionGeometry& regGeom); - POLYVOX_API void adjustDecimatedGeometry(BlockVolume* volumeData, RegionGeometry& regGeom, uint8 val); + POLYVOX_API void smoothRegionGeometry(BlockVolume* volumeData, IndexedSurfacePatch& isp); + POLYVOX_API void adjustDecimatedGeometry(BlockVolume* volumeData, IndexedSurfacePatch& isp, uint8 val); } #endif \ No newline at end of file diff --git a/library/include/PolyVoxCore/SurfaceExtractors.h b/library/include/PolyVoxCore/SurfaceExtractors.h index 103122ef..8ef3c589 100644 --- a/library/include/PolyVoxCore/SurfaceExtractors.h +++ b/library/include/PolyVoxCore/SurfaceExtractors.h @@ -34,11 +34,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - POLYVOX_API void generateRoughMeshDataForRegion(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); - - POLYVOX_API void generateReferenceMeshDataForRegion(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); - - POLYVOX_API void generateDecimatedMeshDataForRegion(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch); + POLYVOX_API void extractSurface(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch); + POLYVOX_API void extractReferenceSurface(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); } #endif diff --git a/library/source/PolyVoxCore/GradientEstimators.cpp b/library/source/PolyVoxCore/GradientEstimators.cpp index 565b5f8c..794dd7da 100644 --- a/library/source/PolyVoxCore/GradientEstimators.cpp +++ b/library/source/PolyVoxCore/GradientEstimators.cpp @@ -1,6 +1,5 @@ #include "PolyVoxCore/GradientEstimators.h" #include "PolyVoxCore/IndexedSurfacePatch.h" -#include "PolyVoxCore/RegionGeometry.h" #include "PolyVoxCore/SurfaceVertex.h" #include "PolyVoxCore/PolyVoxCStdInt.h" @@ -9,13 +8,13 @@ using namespace std; namespace PolyVox { - POLYVOX_API void computeNormalsForVertices(BlockVolume* volumeData, RegionGeometry& regGeom, NormalGenerationMethod normalGenerationMethod) + POLYVOX_API void computeNormalsForVertices(BlockVolume* volumeData, IndexedSurfacePatch& isp, NormalGenerationMethod normalGenerationMethod) { - std::vector& vecVertices = regGeom.m_patchSingleMaterial->m_vecVertices; + std::vector& vecVertices = isp.m_vecVertices; std::vector::iterator iterSurfaceVertex = vecVertices.begin(); while(iterSurfaceVertex != vecVertices.end()) { - const Vector3DFloat& v3dPos = iterSurfaceVertex->getPosition() + static_cast(regGeom.m_v3dRegionPosition); + const Vector3DFloat& v3dPos = iterSurfaceVertex->getPosition() + static_cast(isp.m_v3dRegionPosition); const Vector3DInt32 v3dFloor = static_cast(v3dPos); BlockVolumeIterator volIter(*volumeData); diff --git a/library/source/PolyVoxCore/IndexedSurfacePatch.cpp b/library/source/PolyVoxCore/IndexedSurfacePatch.cpp index c03c3cde..1408f9a5 100644 --- a/library/source/PolyVoxCore/IndexedSurfacePatch.cpp +++ b/library/source/PolyVoxCore/IndexedSurfacePatch.cpp @@ -73,6 +73,21 @@ namespace PolyVox return m_vecTriangleIndices; } + const uint32 IndexedSurfacePatch::getNoOfIndices(void) const + { + return m_vecTriangleIndices.size(); + } + + const uint32 IndexedSurfacePatch::getNoOfVertices(void) const + { + return m_vecVertices.size(); + } + + const bool IndexedSurfacePatch::isEmpty(void) const + { + return (getNoOfVertices() == 0) || (getNoOfIndices() == 0); + } + unsigned short IndexedSurfacePatch::getNoNonUniformTrianges(void) { unsigned short result = 0; diff --git a/library/source/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.cpp b/library/source/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.cpp index f2175a24..cf66b07c 100644 --- a/library/source/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.cpp +++ b/library/source/PolyVoxCore/PolyVoxImpl/DecimatedSurfaceExtractor.cpp @@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "PolyVoxCore/IndexedSurfacePatch.h" #include "PolyVoxCore/MarchingCubesTables.h" #include "PolyVoxCore/Region.h" -#include "PolyVoxCore/RegionGeometry.h" #include "PolyVoxCore/BlockVolumeIterator.h" #include @@ -40,7 +39,7 @@ namespace PolyVox return x + (y * (POLYVOX_REGION_SIDE_LENGTH+1)); } - void generateDecimatedMeshDataForRegionImpl(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch) + void extractDecimatedSurfaceImpl(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch) { singleMaterialPatch->m_vecVertices.clear(); singleMaterialPatch->m_vecTriangleIndices.clear(); diff --git a/library/source/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.cpp b/library/source/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.cpp index ddf45968..7531c1cc 100644 --- a/library/source/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.cpp +++ b/library/source/PolyVoxCore/PolyVoxImpl/FastSurfaceExtractor.cpp @@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - void generateRoughMeshDataForRegionImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) + void extractFastSurfaceImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) { singleMaterialPatch->m_vecVertices.clear(); singleMaterialPatch->m_vecTriangleIndices.clear(); diff --git a/library/source/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.cpp b/library/source/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.cpp index 9aebbe1c..4c2c8c81 100644 --- a/library/source/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.cpp +++ b/library/source/PolyVoxCore/PolyVoxImpl/ReferenceSurfaceExtractor.cpp @@ -31,7 +31,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - void generateReferenceMeshDataForRegionImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) + void extractReferenceSurfaceImpl(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) { static int32 vertexIndicesX[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1]; static int32 vertexIndicesY[POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1][POLYVOX_REGION_SIDE_LENGTH+1]; diff --git a/library/source/PolyVoxCore/RegionGeometry.cpp b/library/source/PolyVoxCore/RegionGeometry.cpp deleted file mode 100644 index 6a9dc08e..00000000 --- a/library/source/PolyVoxCore/RegionGeometry.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma region License -/****************************************************************************** -This file is part of the PolyVox library -Copyright (C) 2006 David Williams - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -******************************************************************************/ -#pragma endregion - -#include "PolyVoxCore/IndexedSurfacePatch.h" -#include "PolyVoxCore/RegionGeometry.h" - -namespace PolyVox -{ - RegionGeometry::RegionGeometry() - { - } -} diff --git a/library/source/PolyVoxCore/SurfaceAdjusters.cpp b/library/source/PolyVoxCore/SurfaceAdjusters.cpp index a1362e63..cda8accf 100644 --- a/library/source/PolyVoxCore/SurfaceAdjusters.cpp +++ b/library/source/PolyVoxCore/SurfaceAdjusters.cpp @@ -3,7 +3,6 @@ #include "PolyVoxCore/BlockVolumeIterator.h" #include "PolyVoxCore/GradientEstimators.h" #include "PolyVoxCore/IndexedSurfacePatch.h" -#include "PolyVoxCore/RegionGeometry.h" #include "PolyVoxCore/Utility.h" #include "PolyVoxCore/VoxelFilters.h" @@ -13,20 +12,20 @@ using namespace std; namespace PolyVox { - void smoothRegionGeometry(BlockVolume* volumeData, RegionGeometry& regGeom) + void smoothRegionGeometry(BlockVolume* volumeData, IndexedSurfacePatch& isp) { const uint8 uSmoothingFactor = 2; const float fThreshold = 0.5f; BlockVolumeIterator volIter(*volumeData); - std::vector& vecVertices = regGeom.m_patchSingleMaterial->m_vecVertices; + std::vector& vecVertices = isp.m_vecVertices; std::vector::iterator iterSurfaceVertex = vecVertices.begin(); while(iterSurfaceVertex != vecVertices.end()) { for(int ct = 0; ct < uSmoothingFactor; ++ct) { - const Vector3DFloat& v3dPos = iterSurfaceVertex->getPosition() + static_cast(regGeom.m_v3dRegionPosition); + const Vector3DFloat& v3dPos = iterSurfaceVertex->getPosition() + static_cast(isp.m_v3dRegionPosition); const Vector3DInt32 v3dFloor = static_cast(v3dPos); const Vector3DFloat& v3dRem = v3dPos - static_cast(v3dFloor); @@ -77,15 +76,15 @@ namespace PolyVox } //while(iterSurfaceVertex != vecVertices.end()) } - void adjustDecimatedGeometry(BlockVolume* volumeData, RegionGeometry& regGeom, uint8 val) + void adjustDecimatedGeometry(BlockVolume* volumeData, IndexedSurfacePatch& isp, uint8 val) { BlockVolumeIterator volIter(*volumeData); - std::vector& vecVertices = regGeom.m_patchSingleMaterial->m_vecVertices; + std::vector& vecVertices = isp.m_vecVertices; std::vector::iterator iterSurfaceVertex = vecVertices.begin(); while(iterSurfaceVertex != vecVertices.end()) { - Vector3DFloat v3dPos = iterSurfaceVertex->getPosition() + static_cast(regGeom.m_v3dRegionPosition); + Vector3DFloat v3dPos = iterSurfaceVertex->getPosition() + static_cast(isp.m_v3dRegionPosition); Vector3DInt32 v3dFloor = static_cast(v3dPos); BlockVolumeIterator volIter(*volumeData); @@ -111,7 +110,7 @@ namespace PolyVox //if(iterSurfaceVertex->getNormal().getX() > 0) { iterSurfaceVertex->setPosition(iterSurfaceVertex->getPosition() - iterSurfaceVertex->getNormal() * 0.5f); - v3dPos = iterSurfaceVertex->getPosition() + static_cast(regGeom.m_v3dRegionPosition); + v3dPos = iterSurfaceVertex->getPosition() + static_cast(isp.m_v3dRegionPosition); v3dFloor = static_cast(v3dPos); volIter.setPosition(static_cast(v3dFloor)); diff --git a/library/source/PolyVoxCore/SurfaceExtractors.cpp b/library/source/PolyVoxCore/SurfaceExtractors.cpp index ba1849e7..2a6b3566 100644 --- a/library/source/PolyVoxCore/SurfaceExtractors.cpp +++ b/library/source/PolyVoxCore/SurfaceExtractors.cpp @@ -5,7 +5,6 @@ #include "PolyVoxCore/IndexedSurfacePatch.h" #include "PolyVoxCore/MarchingCubesTables.h" #include "PolyVoxCore/Region.h" -#include "PolyVoxCore/RegionGeometry.h" #include "PolyVoxCore/SurfaceAdjusters.h" #include "PolyVoxCore/BlockVolumeIterator.h" @@ -19,18 +18,20 @@ using namespace std; namespace PolyVox { - void generateReferenceMeshDataForRegion(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) + void extractSurface(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch) { - generateReferenceMeshDataForRegion(volumeData, region, singleMaterialPatch); + if(uLevel == 0) + { + extractFastSurfaceImpl(volumeData, region, singleMaterialPatch); + } + else + { + extractDecimatedSurfaceImpl(volumeData, uLevel, region, singleMaterialPatch); + } } - void generateRoughMeshDataForRegion(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) + void extractReferenceSurface(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch) { - generateRoughMeshDataForRegionImpl(volumeData, region, singleMaterialPatch); - } - - void generateDecimatedMeshDataForRegion(BlockVolume* volumeData, uint8 uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch) - { - generateDecimatedMeshDataForRegionImpl(volumeData, uLevel, region, singleMaterialPatch); + extractReferenceSurfaceImpl(volumeData, region, singleMaterialPatch); } } diff --git a/library/source/PolyVoxUtil/VolumeChangeTracker.cpp b/library/source/PolyVoxUtil/VolumeChangeTracker.cpp index d46e814b..587d6fed 100644 --- a/library/source/PolyVoxUtil/VolumeChangeTracker.cpp +++ b/library/source/PolyVoxUtil/VolumeChangeTracker.cpp @@ -25,7 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "PolyVoxCore/IndexedSurfacePatch.h" #include "PolyVoxCore/LinearVolume.h" #include "PolyVoxCore/MarchingCubesTables.h" -#include "PolyVoxCore/RegionGeometry.h" #include "PolyVoxCore/SurfaceExtractors.h" #include "PolyVoxCore/SurfaceVertex.h" #include "PolyVoxCore/Utility.h"