Decimation now handles level 0 and level 1. Crashes on level 2...
This commit is contained in:
		| @@ -44,7 +44,7 @@ namespace PolyVox | ||||
| 		bool operator>=(const BlockVolumeIterator& rhs); | ||||
|  | ||||
| 		float getAveragedVoxel(boost::uint16_t size) const; | ||||
| 		VoxelType getMaxedVoxel(boost::uint8_t level) const; | ||||
| 		VoxelType getMaxedVoxel(boost::uint8_t uLevel) const; | ||||
| 		boost::uint16_t getPosX(void) const; | ||||
| 		boost::uint16_t getPosY(void) const; | ||||
| 		boost::uint16_t getPosZ(void) const; | ||||
|   | ||||
| @@ -137,13 +137,13 @@ namespace PolyVox | ||||
| 	} | ||||
|  | ||||
| 	template <typename VoxelType> | ||||
| 	VoxelType BlockVolumeIterator<VoxelType>::getMaxedVoxel(boost::uint8_t level) const | ||||
| 	VoxelType BlockVolumeIterator<VoxelType>::getMaxedVoxel(boost::uint8_t uLevel) const | ||||
| 	{		 | ||||
| 		if(level == 0) | ||||
| 		if(uLevel == 0) | ||||
| 		{ | ||||
| 			return getVoxel(); | ||||
| 		} | ||||
| 		else if(level == 1) | ||||
| 		else if(uLevel == 1) | ||||
| 		{ | ||||
| 			VoxelType tValue = getVoxel(); | ||||
| 			tValue = (std::max)(tValue, peekVoxel1px0py0pz()); | ||||
| @@ -155,8 +155,23 @@ namespace PolyVox | ||||
| 			tValue = (std::max)(tValue, peekVoxel1px1py1pz()); | ||||
| 			return tValue; | ||||
| 		} | ||||
| 		assert(false); | ||||
| 		return 0; | ||||
| 		else | ||||
| 		{ | ||||
| 			const boost::uint8_t uSize = 1 << uLevel; | ||||
|  | ||||
| 			VoxelType tValue = 0; | ||||
| 			for(boost::uint8_t z = 0; z < uSize; ++z) | ||||
| 			{ | ||||
| 				for(boost::uint8_t y = 0; y < uSize; ++y) | ||||
| 				{ | ||||
| 					for(boost::uint8_t x = 0; x < uSize; ++x) | ||||
| 					{ | ||||
| 						tValue = (std::max)(tValue, mVolume.getVoxelAt(mXPosInVolume + x, mYPosInVolume + y, mZPosInVolume + z)); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return tValue; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	template <typename VoxelType> | ||||
|   | ||||
| @@ -39,8 +39,8 @@ namespace PolyVox | ||||
| 	POLYVOX_API void generateDecimatedMeshDataForRegion(BlockVolume<boost::uint8_t>* volumeData, boost::uint8_t uLevel, Region region, IndexedSurfacePatch* singleMaterialPatch); | ||||
| 	POLYVOX_API boost::uint32_t computeInitialDecimatedBitmaskForSlice(BlockVolumeIterator<boost::uint8_t>& volIter, boost::uint8_t uLevel, const Region& regSlice, const Vector3DFloat& offset, boost::uint8_t *bitmask); | ||||
| 	POLYVOX_API boost::uint32_t computeDecimatedBitmaskForSliceFromPrevious(BlockVolumeIterator<boost::uint8_t>& volIter, boost::uint8_t uLevel, const Region& regSlice, const Vector3DFloat& offset, boost::uint8_t *bitmask, boost::uint8_t *previousBitmask); | ||||
| 	POLYVOX_API void generateDecimatedIndicesForSlice(BlockVolumeIterator<boost::uint8_t>& volIter, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, boost::uint8_t* bitmask0, boost::uint8_t* bitmask1, boost::int32_t vertexIndicesX0[],boost::int32_t vertexIndicesY0[],boost::int32_t vertexIndicesZ0[], boost::int32_t vertexIndicesX1[],boost::int32_t vertexIndicesY1[],boost::int32_t vertexIndicesZ1[]); | ||||
| 	POLYVOX_API void generateDecimatedVerticesForSlice(BlockVolumeIterator<boost::uint8_t>& volIter, Region& regSlice, const Vector3DFloat& offset, boost::uint8_t* bitmask, IndexedSurfacePatch* singleMaterialPatch,boost::int32_t vertexIndicesX[],boost::int32_t vertexIndicesY[],boost::int32_t vertexIndicesZ[]); | ||||
| 	POLYVOX_API void generateDecimatedIndicesForSlice(BlockVolumeIterator<boost::uint8_t>& volIter, boost::uint8_t uLevel, const Region& regSlice, IndexedSurfacePatch* singleMaterialPatch, const Vector3DFloat& offset, boost::uint8_t* bitmask0, boost::uint8_t* bitmask1, boost::int32_t vertexIndicesX0[],boost::int32_t vertexIndicesY0[],boost::int32_t vertexIndicesZ0[], boost::int32_t vertexIndicesX1[],boost::int32_t vertexIndicesY1[],boost::int32_t vertexIndicesZ1[]); | ||||
| 	POLYVOX_API void generateDecimatedVerticesForSlice(BlockVolumeIterator<boost::uint8_t>& volIter, boost::uint8_t uLevel, Region& regSlice, const Vector3DFloat& offset, boost::uint8_t* bitmask, IndexedSurfacePatch* singleMaterialPatch,boost::int32_t vertexIndicesX[],boost::int32_t vertexIndicesY[],boost::int32_t vertexIndicesZ[]); | ||||
|  | ||||
| 	POLYVOX_API void generateDecimatedMeshDataForRegionSlow(BlockVolume<boost::uint8_t>* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user