Helios++
Helios software for LiDAR simulations
KDTreeRaycaster.h
1 #pragma once
2 
3 // TODO 4: Merge search_recursive() and search_all_recursive?
4 
5 #include "Primitive.h"
6 #include "Material.h"
7 #include "RaySceneIntersection.h"
8 
9 #include "KDTreeNode.h"
10 
15 public:
16  // *** ATTRIBUTES *** //
17  // ******************** //
21  double epsilon = 0.0001;
26  bool groundOnly = false;
30  glm::dvec3 rayDir;
34  glm::dvec3 rayOrigin;
41  std::vector<double> rayDirArray;
48  std::vector<double> rayOriginArray;
52  std::shared_ptr<KDTreeNode> root;
57  double closestHitDistance = std::numeric_limits<double>::max();
64  std::map<double, Primitive*> collectedPoints;
65 
66  // *** CONSTRUCTION / DESTRUCTION *** //
67  // ************************************ //
72  KDTreeRaycaster(std::shared_ptr<KDTreeNode> root) {this->root = root;}
73 
74  // *** M E T H O D S *** //
75  // *********************** //
92  std::map<double, Primitive*> searchAll(
93  glm::dvec3 _rayOrigin,
94  glm::dvec3 _rayDir,
95  double tmin,
96  double tmax,
97  bool groundOnly
98  );
115  glm::dvec3 _rayOrigin,
116  glm::dvec3 _rayDir,
117  double tmin,
118  double tmax,
119  bool groundOnly
120  );
132  void searchAll_recursive(KDTreeNode* node, double tmin, double tmax);
145  Primitive* search_recursive(KDTreeNode* node, double tmin, double tmax);
146 };
RaySceneIntersection * search(glm::dvec3 _rayOrigin, glm::dvec3 _rayDir, double tmin, double tmax, bool groundOnly)
Search first intersection for specified ray.
Definition: KDTreeRaycaster.cpp:28
glm::dvec3 rayDir
Ray 3D director vector.
Definition: KDTreeRaycaster.h:30
std::vector< double > rayOriginArray
Vector containing components of ray origin. It is filled at the start of a search operation...
Definition: KDTreeRaycaster.h:48
void searchAll_recursive(KDTreeNode *node, double tmin, double tmax)
Recursive search function to assist searchAll function.
Definition: KDTreeRaycaster.cpp:60
bool groundOnly
Flag to specify if only ground points must be considered (true) or not (false)
Definition: KDTreeRaycaster.h:26
double closestHitDistance
Distance of closest hit. It is numeric_limits<double>::max() by default.
Definition: KDTreeRaycaster.h:57
glm::dvec3 rayOrigin
Ray origin 3D coordinates.
Definition: KDTreeRaycaster.h:34
Primitive * search_recursive(KDTreeNode *node, double tmin, double tmax)
Recursive search function to assist search function.
Definition: KDTreeRaycaster.cpp:160
std::vector< double > rayDirArray
Vector containing components of ray director vector. It is filled at the start of a search operation...
Definition: KDTreeRaycaster.h:41
double epsilon
Decimal precision for the ray caster.
Definition: KDTreeRaycaster.h:21
std::map< double, Primitive * > collectedPoints
Map of primitives identified by its distance with respect to ray origin. Only primitives which inters...
Definition: KDTreeRaycaster.h:64
std::shared_ptr< KDTreeNode > root
Shared pointer to the root node of the KDTree.
Definition: KDTreeRaycaster.h:52
Class representing a the intersection of a ray over a scene made of primitives.
Definition: RaySceneIntersection.h:12
Class representing a KDTree node.
Definition: KDTreeNode.h:16
KDTreeRaycaster(std::shared_ptr< KDTreeNode > root)
KDTree ray caster constructor.
Definition: KDTreeRaycaster.h:72
Class representing a KDTree ray caster.
Definition: KDTreeRaycaster.h:14
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:20
std::map< double, Primitive * > searchAll(glm::dvec3 _rayOrigin, glm::dvec3 _rayDir, double tmin, double tmax, bool groundOnly)
Search all intersections for specified ray.
Definition: KDTreeRaycaster.cpp:7