Fix for broken moveNegative...() sampler functions.
Fixed bug in surface extractor causing divide by zero and/or infinite vertices.
This commit is contained in:
parent
c395fc88a9
commit
cc1aa8a514
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user