Fix for broken moveNegative...() sampler functions.

Fixed bug in surface extractor causing divide by zero and/or infinite vertices.
This commit is contained in:
David Williams 2010-09-12 21:10:15 +00:00
parent c395fc88a9
commit cc1aa8a514
2 changed files with 12 additions and 6 deletions

View File

@ -467,6 +467,8 @@ namespace PolyVox
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge); surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex); uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
m_pCurrentVertexIndicesX[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex; m_pCurrentVertexIndicesX[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
m_sampVolume.moveNegativeX();
} }
if (edgeTable[iCubeIndex] & 8) if (edgeTable[iCubeIndex] & 8)
{ {
@ -495,6 +497,8 @@ namespace PolyVox
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge); surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex); uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
m_pCurrentVertexIndicesY[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex; m_pCurrentVertexIndicesY[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
m_sampVolume.moveNegativeY();
} }
if (edgeTable[iCubeIndex] & 256) if (edgeTable[iCubeIndex] & 256)
{ {
@ -523,6 +527,8 @@ namespace PolyVox
surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge); surfaceVertex.setOnGeometryEdgePosZ(isPosZEdge);
uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex); uint32_t uLastVertexIndex = m_meshCurrent->addVertex(surfaceVertex);
m_pCurrentVertexIndicesZ[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex; m_pCurrentVertexIndicesZ[uXVolSpace - m_regSizeInVoxels.getLowerCorner().getX()][uYVolSpace - m_regSizeInVoxels.getLowerCorner().getY()] = uLastVertexIndex;
m_sampVolume.moveNegativeZ();
} }
}//For each cell }//For each cell
} }

View File

@ -228,11 +228,11 @@ namespace PolyVox
template <typename VoxelType> template <typename VoxelType>
void VolumeSampler<VoxelType>::moveNegativeX(void) void VolumeSampler<VoxelType>::moveNegativeX(void)
{ {
//Note the *post* increament here //Note the *post* decreament here
if((mXPosInVolume--) % mVolume->m_uBlockSideLength != 0) if((mXPosInVolume--) % mVolume->m_uBlockSideLength != 0)
{ {
//No need to compute new block. //No need to compute new block.
++mCurrentVoxel; --mCurrentVoxel;
} }
else else
{ {
@ -244,11 +244,11 @@ namespace PolyVox
template <typename VoxelType> template <typename VoxelType>
void VolumeSampler<VoxelType>::moveNegativeY(void) void VolumeSampler<VoxelType>::moveNegativeY(void)
{ {
//Note the *post* increament here //Note the *post* decreament here
if((mYPosInVolume--) % mVolume->m_uBlockSideLength != 0) if((mYPosInVolume--) % mVolume->m_uBlockSideLength != 0)
{ {
//No need to compute new block. //No need to compute new block.
mCurrentVoxel += mVolume->m_uBlockSideLength; mCurrentVoxel -= mVolume->m_uBlockSideLength;
} }
else else
{ {
@ -260,11 +260,11 @@ namespace PolyVox
template <typename VoxelType> template <typename VoxelType>
void VolumeSampler<VoxelType>::moveNegativeZ(void) void VolumeSampler<VoxelType>::moveNegativeZ(void)
{ {
//Note the *post* increament here //Note the *post* decreament here
if((mZPosInVolume--) % mVolume->m_uBlockSideLength != 0) if((mZPosInVolume--) % mVolume->m_uBlockSideLength != 0)
{ {
//No need to compute new block. //No need to compute new block.
mCurrentVoxel += mVolume->m_uBlockSideLength * mVolume->m_uBlockSideLength; mCurrentVoxel -= mVolume->m_uBlockSideLength * mVolume->m_uBlockSideLength;
} }
else else
{ {