LowPassFilter no longer requires convertToDensity() but instead assumes voxel types define operator+=, operator/=, etc.
This commit is contained in:
		| @@ -76,6 +76,18 @@ namespace PolyVox | ||||
| 			return !(*this == rhs); | ||||
| 		} | ||||
|  | ||||
| 		Density<Type>& operator+=(const Density<Type>& rhs) | ||||
| 		{ | ||||
| 			m_uDensity += rhs.m_uDensity; | ||||
| 			return *this; | ||||
| 		} | ||||
|  | ||||
| 		Density<Type>& operator/=(uint32_t rhs) | ||||
| 		{ | ||||
| 			m_uDensity /= rhs; | ||||
| 			return *this; | ||||
| 		} | ||||
|  | ||||
| 		DensityType getDensity() const throw() { return m_uDensity; } | ||||
| 		//MaterialType getMaterial() const throw() { return 1; } | ||||
|  | ||||
|   | ||||
| @@ -75,40 +75,39 @@ namespace PolyVox | ||||
|  | ||||
| 					typename SrcVolumeType::VoxelType tSrcVoxel = srcSampler.getVoxel(); | ||||
|  | ||||
| 					uint32_t uDensity = 0; | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1ny1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1ny0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1ny1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx0py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx0py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx0py1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1nx1py1pz()); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1ny1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1ny0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1ny1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx0py1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx0py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx0py1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1py1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1nx1py1pz(); | ||||
|  | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1ny1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1ny0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1ny1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px0py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px0py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px0py1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel0px1py1pz()); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1ny1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1ny0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1ny1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px0py1nz(); | ||||
| 					//tSrcVoxel += srcSampler.peekVoxel0px0py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px0py1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1py1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel0px1py1pz(); | ||||
|  | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1ny1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1ny0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1ny1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px0py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px0py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px0py1pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1py1nz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1py0pz()); | ||||
| 					uDensity += convertToDensity(srcSampler.peekVoxel1px1py1pz()); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1ny1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1ny0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1ny1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px0py1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px0py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px0py1pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1py1nz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1py0pz(); | ||||
| 					tSrcVoxel += srcSampler.peekVoxel1px1py1pz(); | ||||
|  | ||||
| 					uDensity /= 27; | ||||
| 					tSrcVoxel /= 27; | ||||
|  | ||||
| 					tSrcVoxel.setDensity(uDensity); | ||||
| 					//tSrcVoxel.setDensity(uDensity); | ||||
| 					m_pVolDst->setVoxelAt(iSrcX, iSrcY, iSrcZ, tSrcVoxel); | ||||
| 				} | ||||
| 			} | ||||
|   | ||||
| @@ -69,6 +69,24 @@ namespace PolyVox | ||||
| 			return !(*this == rhs); | ||||
| 		} | ||||
|  | ||||
| 		MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits>& operator+=(const MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits>& rhs) | ||||
| 		{ | ||||
| 			m_uDensity += rhs.m_uDensity; | ||||
|  | ||||
| 			// What should we do with the material? Conceptually the idea of adding materials makes no sense, but for our | ||||
| 			// purposes we consider the 'sum' of two materials to just be the max. At least this way it is commutative. | ||||
| 			m_uMaterial = (std::max)(m_uMaterial, rhs.m_uMaterial); | ||||
|  | ||||
| 			return *this; | ||||
| 		} | ||||
|  | ||||
| 		MaterialDensityPair<Type, NoOfMaterialBits, NoOfDensityBits>& operator/=(uint32_t rhs) | ||||
| 		{ | ||||
| 			// There's nothing sensible we can do with the material, so this function only affects the density. | ||||
| 			m_uDensity /= rhs; | ||||
| 			return *this; | ||||
| 		} | ||||
|  | ||||
| 		DensityType getDensity() const throw() { return m_uDensity; } | ||||
| 		MaterialType getMaterial() const throw() { return m_uMaterial; } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user