#pragma once #ifndef GLM_FORCE_RADIANS #define GLM_FORCE_RADIANS #endif #include #include "../../inc/glm/glm.hpp" #include "../../core/Defines.h" #include "../Hashers.h" #include "../Util/TransferFunction.h" #include "BaseVoxelizer.h" class PVMVoxelizer : public BaseVoxelizer { public: PVMVoxelizer(); virtual ~PVMVoxelizer() override; bool Initialize() override; bool LoadScene(const std::string& sceneFileName) override; bool UnloadScene() override; std::vector GetValidCoords(unsigned8 scale) override; void Voxelize(unsigned8 scale, unsigned8 partScale, glm::uvec3 partCoord, const std::function& nodeAdder, bool colors = true, bool normals = true, bool reflectivity = true) override; // Keep other voxelize overloads from the base using BaseVoxelizer::Voxelize; protected: private: static void ReadVolumeData(const std::string& filename, unsigned32& width, unsigned32& height, unsigned32& depth, unsigned32& components, std::vector& data); // Voxelize overload that allows for custom filters. Default is average. void Voxelize(unsigned8 scale, unsigned8 partScale, glm::uvec3 partCoord, const std::function& nodeAdder, const std::function values)>& opacityFilter, const std::function, const std::vector)>& colorFilter); unsigned32 mWidth, mHeight, mDepth, mComponents; unsigned8 mScale; std::vector mVolume; TransferFunction mTransferFunction; float mMinOpacity; };