Skip to content

Commit 5717033

Browse files
committed
fix(RayTracing): change process if intersection can be detected but not calculated
1 parent c1679e1 commit 5717033

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

src/geode/mesh/helpers/ray_tracing.cpp

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -461,26 +461,35 @@ namespace geode
461461
std::lock_guard< std::mutex > lock{ mutex_ };
462462
results_.emplace_back( polygon_id, distance, result.second,
463463
std::move( intersection_result ) );
464+
break;
464465
}
465-
else
466+
for( const auto e2 : LRange{ 3 } )
466467
{
467-
for( const auto e2 : LRange{ 3 } )
468-
{
469-
auto point = std::get< 1 >( segment_segment_distance(
470-
Segment3D{ segment_ },
468+
auto [ray_edge_distance, point, _] =
469+
segment_segment_distance( Segment3D{ segment_ },
471470
{ triangle.vertices()[e2].get(),
472-
triangle.vertices()[( e2 + 1 ) % 3].get() } ) );
473-
auto distance = point_point_distance( origin_, point );
474-
if( Vector3D{ origin_, point }.dot(
475-
segment_.direction() )
476-
< 0 )
477-
{
478-
distance *= -1.;
479-
}
480-
std::lock_guard< std::mutex > lock{ mutex_ };
481-
results_.emplace_back( polygon_id, distance,
482-
result.second, std::move( point ) );
471+
triangle.vertices()[( e2 + 1 ) % 3].get() } );
472+
if( ray_edge_distance > GLOBAL_EPSILON )
473+
{
474+
continue;
475+
}
476+
auto distance = point_point_distance( origin_, point );
477+
if( Vector3D{ origin_, point }.dot( segment_.direction() )
478+
< 0 )
479+
{
480+
distance *= -1.;
483481
}
482+
std::lock_guard< std::mutex > lock{ mutex_ };
483+
results_.emplace_back( polygon_id, distance, result.second,
484+
std::move( point ) );
485+
}
486+
const auto [distance, __, triangle_point] =
487+
segment_triangle_distance( segment_, triangle );
488+
if( distance < GLOBAL_EPSILON )
489+
{
490+
std::lock_guard< std::mutex > lock{ mutex_ };
491+
results_.emplace_back(
492+
polygon_id, distance, result.second, triangle_point );
484493
}
485494
break;
486495
}

0 commit comments

Comments
 (0)