Extractors now templatised on index type.
This commit is contained in:
parent
52dd0189d5
commit
c5cf71b161
@ -188,10 +188,10 @@ namespace PolyVox
|
||||
typename VolumeType::VoxelType m_tBorderValue;
|
||||
};
|
||||
|
||||
template<typename VolumeType, typename IsQuadNeeded = DefaultIsQuadNeeded<typename VolumeType::VoxelType> >
|
||||
template<typename VolumeType, typename IsQuadNeeded = DefaultIsQuadNeeded<typename VolumeType::VoxelType>, typename IndexType = DefaultIndexType >
|
||||
Mesh<CubicVertex<typename VolumeType::VoxelType> > extractCubicMesh(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), bool bMergeQuads = true, IsQuadNeeded isQuadNeeded = IsQuadNeeded())
|
||||
{
|
||||
typedef Mesh<CubicVertex<typename VolumeType::VoxelType> > MeshType;
|
||||
typedef Mesh<CubicVertex<typename VolumeType::VoxelType>, IndexType > MeshType;
|
||||
MeshType result;
|
||||
CubicSurfaceExtractor<VolumeType, MeshType, IsQuadNeeded> extractor(volData, region, &result, eWrapMode, tBorderValue, bMergeQuads, isQuadNeeded);
|
||||
extractor.execute();
|
||||
|
@ -147,11 +147,11 @@ namespace PolyVox
|
||||
return result;
|
||||
}
|
||||
|
||||
template< typename VolumeType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType> >
|
||||
template< typename VolumeType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType>, typename IndexType = DefaultIndexType >
|
||||
class MarchingCubesSurfaceExtractor
|
||||
{
|
||||
public:
|
||||
MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, Mesh<MarchingCubesVertex<typename VolumeType::VoxelType> >* result, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller());
|
||||
MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, Mesh<MarchingCubesVertex<typename VolumeType::VoxelType>, IndexType >* result, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller());
|
||||
|
||||
void execute();
|
||||
|
||||
@ -318,11 +318,11 @@ namespace PolyVox
|
||||
typename Controller::DensityType m_tThreshold;
|
||||
};
|
||||
|
||||
template< typename VolumeType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType> >
|
||||
template< typename VolumeType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType>, typename IndexType = DefaultIndexType >
|
||||
Mesh<MarchingCubesVertex<typename VolumeType::VoxelType> > extractMarchingCubesMesh(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller())
|
||||
{
|
||||
Mesh<MarchingCubesVertex<typename VolumeType::VoxelType> > result;
|
||||
MarchingCubesSurfaceExtractor<VolumeType, Controller> extractor(volData, region, &result, eWrapMode, tBorderValue, controller);
|
||||
Mesh<MarchingCubesVertex<typename VolumeType::VoxelType>, IndexType > result;
|
||||
MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType> extractor(volData, region, &result, eWrapMode, tBorderValue, controller);
|
||||
extractor.execute();
|
||||
return result;
|
||||
}
|
||||
|
@ -25,8 +25,8 @@ freely, subject to the following restrictions:
|
||||
|
||||
namespace PolyVox
|
||||
{
|
||||
template<typename VolumeType, typename Controller>
|
||||
MarchingCubesSurfaceExtractor<VolumeType, Controller>::MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, Mesh<MarchingCubesVertex<typename VolumeType::VoxelType> >* result, WrapMode eWrapMode, typename VolumeType::VoxelType tBorderValue, Controller controller)
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, Mesh<MarchingCubesVertex<typename VolumeType::VoxelType>, IndexType >* result, WrapMode eWrapMode, typename VolumeType::VoxelType tBorderValue, Controller controller)
|
||||
:m_volData(volData)
|
||||
,m_sampVolume(volData)
|
||||
,m_meshCurrent(result)
|
||||
@ -41,8 +41,8 @@ namespace PolyVox
|
||||
m_sampVolume.setWrapMode(eWrapMode, tBorderValue);
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename Controller>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller>::execute()
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::execute()
|
||||
{
|
||||
Timer timer;
|
||||
m_meshCurrent->clear();
|
||||
@ -129,9 +129,9 @@ namespace PolyVox
|
||||
<< "x" << m_regSizeInVoxels.getDepthInVoxels() << ")");
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename Controller>
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
template<bool isPrevZAvail>
|
||||
uint32_t MarchingCubesSurfaceExtractor<VolumeType, Controller>::computeBitmaskForSlice(const Array2DUint8& pPreviousBitmask, Array2DUint8& pCurrentBitmask)
|
||||
uint32_t MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::computeBitmaskForSlice(const Array2DUint8& pPreviousBitmask, Array2DUint8& pCurrentBitmask)
|
||||
{
|
||||
m_uNoOfOccupiedCells = 0;
|
||||
|
||||
@ -195,9 +195,9 @@ namespace PolyVox
|
||||
return m_uNoOfOccupiedCells;
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename Controller>
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
template<bool isPrevXAvail, bool isPrevYAvail, bool isPrevZAvail>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller>::computeBitmaskForCell(const Array2DUint8& pPreviousBitmask, Array2DUint8& pCurrentBitmask, uint32_t uXRegSpace, uint32_t uYRegSpace)
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::computeBitmaskForCell(const Array2DUint8& pPreviousBitmask, Array2DUint8& pCurrentBitmask, uint32_t uXRegSpace, uint32_t uYRegSpace)
|
||||
{
|
||||
uint8_t iCubeIndex = 0;
|
||||
|
||||
@ -395,8 +395,8 @@ namespace PolyVox
|
||||
}
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename Controller>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller>::generateVerticesForSlice(const Array2DUint8& pCurrentBitmask,
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::generateVerticesForSlice(const Array2DUint8& pCurrentBitmask,
|
||||
Array2DInt32& m_pCurrentVertexIndicesX,
|
||||
Array2DInt32& m_pCurrentVertexIndicesY,
|
||||
Array2DInt32& m_pCurrentVertexIndicesZ)
|
||||
@ -535,8 +535,8 @@ namespace PolyVox
|
||||
}
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename Controller>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller>::generateIndicesForSlice(const Array2DUint8& pPreviousBitmask,
|
||||
template<typename VolumeType, typename Controller, typename IndexType>
|
||||
void MarchingCubesSurfaceExtractor<VolumeType, Controller, IndexType>::generateIndicesForSlice(const Array2DUint8& pPreviousBitmask,
|
||||
const Array2DInt32& m_pPreviousVertexIndicesX,
|
||||
const Array2DInt32& m_pPreviousVertexIndicesY,
|
||||
const Array2DInt32& m_pPreviousVertexIndicesZ,
|
||||
|
@ -111,7 +111,7 @@ namespace PolyVox
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// MarchingCubesSurfaceExtractor
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
template<typename VolumeType, typename Controller> class MarchingCubesSurfaceExtractor;
|
||||
template<typename VolumeType, typename Controller, typename IndexType > class MarchingCubesSurfaceExtractor;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// MarchingCubesVertex
|
||||
|
Loading…
x
Reference in New Issue
Block a user