Initial commit: Final state of the master project
This commit is contained in:
91
Research/core/OctreeBuilder/BaseOctreeBuilder.h
Normal file
91
Research/core/OctreeBuilder/BaseOctreeBuilder.h
Normal file
@@ -0,0 +1,91 @@
|
||||
#pragma once
|
||||
#ifndef GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_RADIANS
|
||||
#endif
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "../../inc/glm/glm.hpp"
|
||||
#include "../../core/Defines.h"
|
||||
|
||||
struct VoxelInfo;
|
||||
struct OctreeBuilderStatistics;
|
||||
class BaseVoxelizer;
|
||||
|
||||
// BaseOctreeBuilder handles octree generation with any base voxelizer.
|
||||
// Note that this class is abstract and will call several methods that any actual octree builder can implement.
|
||||
class BaseOctreeBuilder
|
||||
{
|
||||
public:
|
||||
BaseOctreeBuilder() :
|
||||
mForceRebuild(false)
|
||||
{}
|
||||
virtual ~BaseOctreeBuilder() {}
|
||||
|
||||
// Given a voxelizer with a loaded scene, buil
|
||||
OctreeBuilderStatistics BuildOctree(BaseVoxelizer& voxelizer, unsigned8 level, unsigned8 maxSingle);
|
||||
|
||||
virtual std::string GetTreeType() = 0;
|
||||
|
||||
void SetOutputFile(std::string outputFile) { mOutputFile = outputFile; }
|
||||
std::string GetOutputFile() const { return mOutputFile; }\
|
||||
|
||||
void SetVerbose(bool verbose) { this->verbose = verbose; }
|
||||
bool GetVerbose() const { return verbose; }
|
||||
|
||||
void SetForceRebuild(bool force) { mForceRebuild = force; }
|
||||
bool GetForceRebuild() const { return mForceRebuild; }
|
||||
protected:
|
||||
virtual bool UsePreprocessing() const { return false; }
|
||||
virtual bool RequiresColors() const = 0;
|
||||
virtual bool RequiresNormals() const = 0;
|
||||
virtual bool RequiresReflectivity() const = 0;
|
||||
|
||||
// Used to sort the subtrees for optimal building speed (some trees might be quicker to build in a certain order)
|
||||
// Should return true if the first coord should go before the second
|
||||
virtual bool SubTreeCompare(const glm::uvec3& coord1, const glm::uvec3& coord2) const;
|
||||
|
||||
// Functions to override for preprocessing
|
||||
virtual bool CancelPreprocessing() { return false; }
|
||||
virtual void InitPreprocessing() {}
|
||||
virtual void InitCurPreprocessPass(glm::uvec3 coordinate) {}
|
||||
virtual void PreProcessNode(const VoxelInfo& voxel) { printf("Warning: PreProcessNode() not implemented!"); }
|
||||
virtual void PreProcessMissingNode(const VoxelInfo& voxel) {}
|
||||
virtual void FinalizeCurPreprocessPass(glm::uvec3 coord) {}
|
||||
virtual void FinalizePreprocessing() {}
|
||||
|
||||
// Functions to override for main tree building
|
||||
virtual void InitTree() = 0;
|
||||
virtual bool CancelCurPassTree(const glm::uvec3& coord) { return false; }
|
||||
virtual void InitCurPassTree(glm::uvec3 coord) = 0;
|
||||
virtual void AddNode(const VoxelInfo& voxel) = 0;
|
||||
virtual void AddMissingNode(const VoxelInfo& voxel) = 0;
|
||||
virtual void FinalizeCurPassTree(glm::uvec3 coord) = 0;
|
||||
virtual void FinalizeTree() = 0;
|
||||
virtual void TerminateTree() = 0;
|
||||
|
||||
virtual std::vector<size_t> GetOctreeNodesPerLevel() = 0;
|
||||
virtual std::vector<size_t> GetNodesPerLevel() = 0;
|
||||
|
||||
// Some getters that are available during construction
|
||||
// Returns "True" if this tree will be processed in a single pass
|
||||
bool IsSinglePass() const { return maxSinglePassLayers >= maxTreeDepth; }
|
||||
// Returns the depth of the main tree
|
||||
unsigned8 GetTreeDepth() const { return maxTreeDepth; }
|
||||
// Returns the maximum depth of a tree processing in a single pass
|
||||
unsigned8 GetSinglePassTreeDepth() const { return maxTreeDepth < maxSinglePassLayers ? maxTreeDepth : maxSinglePassLayers; }
|
||||
// Returns the level at which subtrees will be appended (e.g. TreeDepth - SinglePassTreeDepth)
|
||||
unsigned8 GetAppendedTreeLevel() const { return IsSinglePass() ? 0 : (maxTreeDepth - maxSinglePassLayers); }
|
||||
// Returns all coordinates that contain triangles in this scene.
|
||||
const std::vector<glm::uvec3>& GetValidCoords() const { return mValidCoords; }
|
||||
|
||||
bool verbose;
|
||||
private:
|
||||
// Override cancelling of subtree building
|
||||
bool mForceRebuild;
|
||||
std::vector<glm::uvec3> mValidCoords;
|
||||
std::string mOutputFile;
|
||||
unsigned8 maxSinglePassLayers;
|
||||
unsigned8 maxTreeDepth;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user