DanielChappuis / reactphysics3d

Open source C++ physics engine library in 3D

Home Page:http://www.reactphysics3d.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MeshCollider raycast bug

EvelynY opened this issue · comments

commented

// in TriangleShape::raycast
const decimal sign = (localHitPoint - ray.point1).dot(pq) > FLT_MIN ? 1.0f : -1.0f;
// hitFraction must multiply sign here, sometimes the point is not on the ray .
const decimal hitFraction = sign * (localHitPoint - ray.point1).length() / pq.length();

if (hitFraction < decimal(0.0) || hitFraction > ray.maxFraction) return false;

Can I please ask you to explain the issue with text? Where does this code coming from exactly? What do you expect and what is wrong?

commented

I am using reactphysics3d for camera collider in my project, by moving away the camera from the meshcollider that obstruct the view. But sometimes the raycast not work well, here is my test data.
ray : {
point1 = (x = -11.6768284, y = 7.62946081, z = -6.41031027)
point2 = (x = -6.94290876, y = 7.38909339, z = -5.27299595)
maxFraction = 1
},
mesh triangle : {
[0] = (x = -11.5843544, y = 10.4978685, z = -7.63218307)
[1] = (x = -12.3325634, y = 5.11047888, z = -6.35258769)
[2] = (x = -12.3325634, y = 10.4978685, z = -6.35258769)
},
the raycast result point is: {
(x = -12.2221985, y = 7.65715217, z = -6.54133463)
},
but the result is not on the ray, this cause my bug, it's on the positive of the ray, you can try my test data.
That code is copy from TriangleShape.cpp in reactphysics3d source, I add ‘const decimal sign = (localHitPoint - ray.point1).dot(pq) > FLT_MIN ? 1.0f : -1.0f;
’ fixed the bug.
Here is a video to explain my problem:
https://user-images.githubusercontent.com/3447313/218084213-a08a5814-c16d-4433-9d71-0fedec87b493.MP4