supereight
Namespaces | Enumerations | Functions | Variables
marching_cube.hpp File Reference
#include "edge_tables.hpp"
#include "se/common/timings.hpp"
#include "se/map/algorithms/mesh.hpp"
#include "se/map/octree/fetcher.hpp"
#include "se/map/octree/iterator.hpp"
#include "se/map/octree/visitor.hpp"
#include "impl/marching_cube_impl.hpp"

Go to the source code of this file.

Namespaces

 se
 Helper wrapper to allocate and de-allocate octants in the octree.
 
 se::meshing
 
 se::algorithms
 

Enumerations

enum  se::meshing::status : uint8_t { se::meshing::OUTSIDE = 0x0, se::meshing::UNKNOWN = 0xFE, se::meshing::INSIDE = 0xFF }
 

Functions

template<typename OctreeT >
Eigen::Vector3f se::meshing::compute_intersection (const OctreeT &octree, const Eigen::Vector3i &source_coord, const Eigen::Vector3i &dest_coord)
 Single-res marching cube implementation. More...
 
template<typename OctreeT >
Eigen::Vector3f se::meshing::interp_vertexes (const OctreeT &octree, const unsigned x, const unsigned y, const unsigned z, const int edge)
 
template<typename BlockT >
void se::meshing::gather_data (const BlockT *block, typename BlockT::DataType data[8], const int x, const int y, const int z)
 
template<typename OctreeT >
void se::meshing::gather_data (const OctreeT &octree, typename OctreeT::DataType data[8], const int x, const int y, const int z)
 
template<typename OctreeT >
uint8_t se::meshing::compute_index (const OctreeT &octree, const typename OctreeT::BlockType *block_ptr, const unsigned x, const unsigned y, const unsigned z)
 
Eigen::Vector3f se::meshing::compute_dual_intersection (const float value_0, const float value_1, const Eigen::Vector3f &dual_corner_coord_0, const Eigen::Vector3f &dual_corner_coord_1, const float voxel_dim, const int)
 Multires-res marching cube implementation. More...
 
template<typename DataT , typename ValueSelector >
Eigen::Vector3f se::meshing::interp_dual_vertexes (const int edge, const DataT data[8], const std::vector< Eigen::Vector3f, Eigen::aligned_allocator< Eigen::Vector3f >> &dual_corner_coords_f, const float voxel_dim, ValueSelector select_value)
 
template<typename BlockT , typename DataT >
void se::meshing::gather_dual_data (const BlockT *block, const int scale, const Eigen::Vector3f &primal_corner_coord_f, DataT data[8], std::vector< Eigen::Vector3f, Eigen::aligned_allocator< Eigen::Vector3f >> &dual_corner_coords_f)
 
void se::meshing::norm_dual_corner_idxs (const Eigen::Vector3i &primal_corner_coord_rel, const int block_size, std::vector< int > &lower_priority_neighbours, std::vector< int > &higher_priority_neighbours, std::vector< std::vector< int >> &neighbours)
 The following strategy is derived from I. More...
 
template<typename OctreeT , typename DataT >
void se::meshing::gather_dual_data (const OctreeT &octree, const typename OctreeT::BlockType *block, const int scale, const Eigen::Vector3i &primal_corner_coord, DataT data[8], std::vector< Eigen::Vector3f, Eigen::aligned_allocator< Eigen::Vector3f >> &dual_corner_coords_f)
 
template<typename OctreeT , typename DataT >
void se::meshing::compute_dual_index (const OctreeT &octree, const typename OctreeT::BlockType *block_ptr, const int scale, const Eigen::Vector3i &primal_corner_coord, uint8_t &edge_pattern_idx, DataT data[8], std::vector< Eigen::Vector3f, Eigen::aligned_allocator< Eigen::Vector3f >> &dual_corner_coords_f)
 
bool se::meshing::checkVertex (const Eigen::Vector3f &vertex_M, const float dim)
 
template<typename OctreeT >
void se::algorithms::marching_cube_kernel (OctreeT &octree, std::vector< typename OctreeT::BlockType *> &block_ptrs, TriangleMesh &triangles)
 
template<typename OctreeT >
void se::algorithms::dual_marching_cube_kernel (OctreeT &octree, std::vector< typename OctreeT::BlockType *> &block_ptrs, TriangleMesh &triangles)
 
template<typename OctreeT >
void se::algorithms::marching_cube (OctreeT &octree, TriangleMesh &triangles)
 Generate the triangle mesh using a primal grid marching cube algorithm. More...
 
template<typename OctreeT >
void se::algorithms::marching_cube (OctreeT &octree, TriangleMesh &triangles, const int frame)
 Generate the triangle mesh using a primal grid marching cube algorithm. More...
 
template<typename OctreeT >
void se::algorithms::dual_marching_cube (OctreeT &octree, TriangleMesh &triangles)
 Generate the triangle mesh using a dual grid marching cube algorithm. More...
 
template<typename OctreeT >
void se::algorithms::dual_marching_cube (OctreeT &octree, TriangleMesh &triangles, const int frame)
 Generate the triangle mesh using a dual grid marching cube algorithm. More...
 

Variables

static const Eigen::Vector3f se::meshing::norm_dual_offset_f [8]
 
static const Eigen::Vector3i se::meshing::logical_dual_offset [8]