More work on tests and surface extraction functions.
This commit is contained in:
parent
64ba3f20f8
commit
e2f43ebc5d
@ -151,7 +151,7 @@ namespace PolyVox
|
|||||||
class MarchingCubesSurfaceExtractor
|
class MarchingCubesSurfaceExtractor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, MeshType* result, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller());
|
MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller(), MeshType* result = nullptr);
|
||||||
|
|
||||||
void execute();
|
void execute();
|
||||||
|
|
||||||
@ -321,9 +321,9 @@ namespace PolyVox
|
|||||||
// We don't provide a default MeshType here. If the user doesn't want to provide a MeshType then it probably makes
|
// We don't provide a default MeshType here. If the user doesn't want to provide a MeshType then it probably makes
|
||||||
// more sense to use the other variaent of this function where the mesh is a return value rather than a parameter.
|
// more sense to use the other variaent of this function where the mesh is a return value rather than a parameter.
|
||||||
template< typename VolumeType, typename MeshType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType> >
|
template< typename VolumeType, typename MeshType, typename Controller = DefaultMarchingCubesController<typename VolumeType::VoxelType> >
|
||||||
void extractMarchingCubesMesh(VolumeType* volData, Region region, MeshType* result, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller())
|
void extractMarchingCubesMesh(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller(), MeshType* result = nullptr)
|
||||||
{
|
{
|
||||||
MarchingCubesSurfaceExtractor<VolumeType, MeshType, Controller> extractor(volData, region, result, eWrapMode, tBorderValue, controller);
|
MarchingCubesSurfaceExtractor<VolumeType, MeshType, Controller> extractor(volData, region, eWrapMode, tBorderValue, controller, result);
|
||||||
extractor.execute();
|
extractor.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ namespace PolyVox
|
|||||||
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> > extractMarchingCubesMesh(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), Controller controller = Controller())
|
||||||
{
|
{
|
||||||
Mesh<MarchingCubesVertex<typename VolumeType::VoxelType>, IndexType > result;
|
Mesh<MarchingCubesVertex<typename VolumeType::VoxelType>, IndexType > result;
|
||||||
extractMarchingCubesMesh(volData, region, &result, eWrapMode, tBorderValue, controller);
|
extractMarchingCubesMesh(volData, region, eWrapMode, tBorderValue, controller, &result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ freely, subject to the following restrictions:
|
|||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
template<typename VolumeType, typename MeshType, typename Controller>
|
template<typename VolumeType, typename MeshType, typename Controller>
|
||||||
MarchingCubesSurfaceExtractor<VolumeType, MeshType, Controller>::MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, MeshType* result, WrapMode eWrapMode, typename VolumeType::VoxelType tBorderValue, Controller controller)
|
MarchingCubesSurfaceExtractor<VolumeType, MeshType, Controller>::MarchingCubesSurfaceExtractor(VolumeType* volData, Region region, WrapMode eWrapMode, typename VolumeType::VoxelType tBorderValue, Controller controller, MeshType* result = nullptr)
|
||||||
:m_volData(volData)
|
:m_volData(volData)
|
||||||
,m_sampVolume(volData)
|
,m_sampVolume(volData)
|
||||||
,m_meshCurrent(result)
|
,m_meshCurrent(result)
|
||||||
@ -34,6 +34,7 @@ namespace PolyVox
|
|||||||
,m_controller(controller)
|
,m_controller(controller)
|
||||||
,m_tThreshold(m_controller.getThreshold())
|
,m_tThreshold(m_controller.getThreshold())
|
||||||
{
|
{
|
||||||
|
POLYVOX_THROW_IF(m_meshCurrent == nullptr, std::invalid_argument, "Provided mesh cannot be null");
|
||||||
//m_regSizeInVoxels.cropTo(m_volData->getEnclosingRegion());
|
//m_regSizeInVoxels.cropTo(m_volData->getEnclosingRegion());
|
||||||
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));
|
||||||
|
@ -178,7 +178,7 @@ void testCustomController(Mesh<MarchingCubesVertex<float> >& result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CustomMarchingCubesController controller;
|
CustomMarchingCubesController controller;
|
||||||
extractMarchingCubesMesh(&volData, volData.getEnclosingRegion(), &result, WrapModes::Border, 0, controller);
|
extractMarchingCubesMesh(&volData, volData.getEnclosingRegion(), WrapModes::Border, 0, controller, &result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSurfaceExtractor::testExecute()
|
void TestSurfaceExtractor::testExecute()
|
||||||
@ -255,12 +255,18 @@ void TestSurfaceExtractor::testExecute()
|
|||||||
QCOMPARE(uintMesh.getNoOfIndices(), 35157u); // Verifies size of mesh
|
QCOMPARE(uintMesh.getNoOfIndices(), 35157u); // Verifies size of mesh
|
||||||
QCOMPARE(uintMesh.getIndex(100), uint32_t(44)); // Verifies that we have 32-bit index buffer
|
QCOMPARE(uintMesh.getIndex(100), uint32_t(44)); // Verifies that we have 32-bit index buffer
|
||||||
|
|
||||||
|
auto floatVol = createAndFillVolume<float>();
|
||||||
|
CustomMarchingCubesController floatCustomController;
|
||||||
|
auto floatMesh = extractMarchingCubesMesh(floatVol, floatVol->getEnclosingRegion(), WrapModes::Border, float(0), floatCustomController);
|
||||||
|
QCOMPARE(floatMesh.getNoOfVertices(), 16113u); // Verifies size of mesh
|
||||||
|
QCOMPARE(floatMesh.getNoOfIndices(), 22053u); // Verifies size of mesh
|
||||||
|
QCOMPARE(floatMesh.getIndex(100), uint32_t(26)); // Verifies that we have 32-bit index buffer
|
||||||
|
|
||||||
auto intVol = createAndFillVolume<int8_t>();
|
auto intVol = createAndFillVolume<int8_t>();
|
||||||
CustomMarchingCubesController intCustomController;
|
auto intMesh = extractMarchingCubesMesh(intVol, intVol->getEnclosingRegion(), WrapModes::Border, int8_t(0), DefaultMarchingCubesController<int8_t>());
|
||||||
auto intMesh = extractMarchingCubesMesh(uintVol, uintVol->getEnclosingRegion(), WrapModes::Border, int8_t(0), intCustomController);
|
QCOMPARE(intMesh.getNoOfVertices(), 11718u); // Verifies size of mesh
|
||||||
QCOMPARE(intMesh.getNoOfVertices(), 16113u); // Verifies size of mesh
|
QCOMPARE(intMesh.getNoOfIndices(), 34041u); // Verifies size of mesh
|
||||||
QCOMPARE(intMesh.getNoOfIndices(), 22053u); // Verifies size of mesh
|
QCOMPARE(intMesh.getIndex(100), uint32_t(29)); // Verifies that we have 32-bit index buffer
|
||||||
QCOMPARE(intMesh.getIndex(100), uint32_t(26)); // Verifies that we have 32-bit index buffer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QTEST_MAIN(TestSurfaceExtractor)
|
QTEST_MAIN(TestSurfaceExtractor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user