Tidying up marching cubes wrap mode support.

This commit is contained in:
Daviw Williams 2012-12-14 15:32:07 +01:00
parent ca45d49e0c
commit 2bc8e8e201
5 changed files with 23 additions and 24 deletions

View File

@ -83,19 +83,6 @@ namespace PolyVox
{ {
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// This version of the constructor allows you to set some custom parameters
/// \param tThreshold The threshold to use.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*DefaultMarchingCubesController(DensityType tThreshold)
{
m_tThreshold = tThreshold;
m_eWrapMode = WrapModes::Border;
m_tBorder = 0;
}*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Converts the underlying voxel type into a density value. /// Converts the underlying voxel type into a density value.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -118,6 +105,11 @@ namespace PolyVox
return 1; return 1;
} }
VoxelType getBorderValue(void)
{
return m_tBorder;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Returns the density value which was passed to the constructor. /// Returns the density value which was passed to the constructor.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -135,11 +127,6 @@ namespace PolyVox
return m_eWrapMode; return m_eWrapMode;
} }
VoxelType getBorderValue(void)
{
return m_tBorder;
}
void setThreshold(DensityType tThreshold) void setThreshold(DensityType tThreshold)
{ {
m_tThreshold = tThreshold; m_tThreshold = tThreshold;
@ -151,7 +138,7 @@ namespace PolyVox
m_tBorder = tBorder; m_tBorder = tBorder;
} }
public: private:
DensityType m_tThreshold; DensityType m_tThreshold;
WrapMode m_eWrapMode; WrapMode m_eWrapMode;
VoxelType m_tBorder; VoxelType m_tBorder;

View File

@ -174,6 +174,11 @@ namespace PolyVox
return 1; return 1;
} }
Density<Type> getBorderValue(void)
{
return m_tBorder;
}
DensityType getThreshold(void) DensityType getThreshold(void)
{ {
return m_tThreshold; return m_tThreshold;
@ -194,7 +199,7 @@ namespace PolyVox
m_eWrapMode = eWrapMode; m_eWrapMode = eWrapMode;
} }
public: private:
DensityType m_tThreshold; DensityType m_tThreshold;
WrapMode m_eWrapMode; WrapMode m_eWrapMode;
Density<Type> m_tBorder; Density<Type> m_tBorder;

View File

@ -36,7 +36,7 @@ namespace PolyVox
m_regSizeInCells = m_regSizeInVoxels; m_regSizeInCells = m_regSizeInVoxels;
m_regSizeInCells.setUpperCorner(m_regSizeInCells.getUpperCorner() - Vector3DInt32(1,1,1)); m_regSizeInCells.setUpperCorner(m_regSizeInCells.getUpperCorner() - Vector3DInt32(1,1,1));
m_sampVolume.setWrapMode(m_controller.getWrapMode(), m_controller.m_tBorder); m_sampVolume.setWrapMode(m_controller.getWrapMode(), m_controller.getBorderValue());
} }
template<typename VolumeType, typename Controller> template<typename VolumeType, typename Controller>

View File

@ -138,6 +138,11 @@ namespace PolyVox
return voxel.getMaterial(); return voxel.getMaterial();
} }
MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits> getBorderValue(void)
{
return m_tBorder;
}
DensityType getThreshold(void) DensityType getThreshold(void)
{ {
return m_tThreshold; return m_tThreshold;
@ -158,7 +163,7 @@ namespace PolyVox
m_eWrapMode = eWrapMode; m_eWrapMode = eWrapMode;
} }
public: private:
DensityType m_tThreshold; DensityType m_tThreshold;
WrapMode m_eWrapMode; WrapMode m_eWrapMode;
MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits> m_tBorder; MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits> m_tBorder;

View File

@ -65,7 +65,10 @@ public:
return WrapModes::Border; return WrapModes::Border;
} }
float m_tBorder; float getBorderValue(void)
{
return 0.0f;
}
}; };
// These 'writeDensityValueToVoxel' functions provide a unified interface for writting densities to primative and class voxel types. // These 'writeDensityValueToVoxel' functions provide a unified interface for writting densities to primative and class voxel types.
@ -153,7 +156,6 @@ void testCustomController(SurfaceMesh<PositionMaterialNormal>& result)
} }
CustomMarchingCubesController controller; CustomMarchingCubesController controller;
controller.m_tBorder = 0.0f; //Temporary HACK!
MarchingCubesSurfaceExtractor< SimpleVolume<float>, CustomMarchingCubesController > extractor(&volData, volData.getEnclosingRegion(), &result, controller); MarchingCubesSurfaceExtractor< SimpleVolume<float>, CustomMarchingCubesController > extractor(&volData, volData.getEnclosingRegion(), &result, controller);
extractor.execute(); extractor.execute();
} }