MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ ray_cast_all()

std::vector< HitResult > MayaFlux::Kinesis::ray_cast_all ( const SpatialIndex3D index,
const Ray ray,
float  tolerance 
)
inline

Find all entities within tolerance of a ray, sorted by distance.

Parameters
indexPublished SpatialIndex3D to query.
rayWorld-space ray.
toleranceMaximum perpendicular distance from the ray axis.
Returns
All hits sorted by ascending perpendicular distance. Empty if none.

Definition at line 148 of file HitTest.hpp.

152{
153 float tol_sq = tolerance * tolerance;
154 std::vector<HitResult> results;
155
156 for (const auto& [id, pos] : index.all()) {
157 float t = 0.0F;
158 float d_sq = point_ray_distance_sq(ray, pos, &t);
159
160 if (t < 0.0F || d_sq > tol_sq) {
161 continue;
162 }
163
164 results.push_back(HitResult {
165 .id = id,
166 .distance = std::sqrt(d_sq),
167 .t = t });
168 }
169
170 std::ranges::sort(results, [](const HitResult& a, const HitResult& b) {
171 return a.distance < b.distance;
172 });
173
174 return results;
175}
size_t a
size_t b
uint32_t id
float point_ray_distance_sq(const Ray &ray, const glm::vec3 &point, float *out_t=nullptr)
Squared perpendicular distance from a point to an infinite ray.
Definition HitTest.hpp:84

References a, MayaFlux::Kinesis::SpatialIndex< PointT >::all(), b, MayaFlux::Kinesis::HitResult::id, id, and point_ray_distance_sq().

+ Here is the call graph for this function: