diff --git a/panda/src/collide/collisionPlane.cxx b/panda/src/collide/collisionPlane.cxx index ffb51f90c1..28b1532687 100644 --- a/panda/src/collide/collisionPlane.cxx +++ b/panda/src/collide/collisionPlane.cxx @@ -125,11 +125,17 @@ test_intersection_from_sphere(CollisionHandler *record, DCAST_INTO_R(sphere, entry.get_from(), 0); LPoint3f from_center = sphere->get_center() * entry.get_wrt_space(); - LVector3f from_radius_v = - LVector3f(sphere->get_radius(), 0.0f, 0.0f) * entry.get_wrt_space(); - float from_radius = length(from_radius_v); - float dist = dist_to_plane(from_center); +// LVector3f from_radius_v = +// LVector3f(sphere->get_radius(), 0.0f, 0.0f) * entry.get_wrt_space(); +// float from_radius = length(from_radius_v); + + const LMatrix4f *pMat = &entry.get_wrt_space(); + float from_radius = sphere->get_radius() * + sqrtf((*pMat)(0,0)*(*pMat)(0,0) + + (*pMat)(0,1)*(*pMat)(0,1) + + (*pMat)(0,2)*(*pMat)(0,2)); + if (dist > from_radius) { // No intersection. return 0; diff --git a/panda/src/collide/collisionPolygon.cxx b/panda/src/collide/collisionPolygon.cxx index b3f45dde22..dfb01fe34f 100644 --- a/panda/src/collide/collisionPolygon.cxx +++ b/panda/src/collide/collisionPolygon.cxx @@ -239,12 +239,20 @@ test_intersection_from_sphere(CollisionHandler *record, DCAST_INTO_R(sphere, entry.get_from(), 0); LPoint3f from_center = sphere->get_center() * entry.get_wrt_space(); - LVector3f from_radius_v = - LVector3f(sphere->get_radius(), 0.0f, 0.0f) * entry.get_wrt_space(); - float from_radius = length(from_radius_v); - float dist = dist_to_plane(from_center); - if (dist > from_radius || dist < -from_radius) { + +// LVector3f from_radius_v = +// LVector3f(sphere->get_radius(), 0.0f, 0.0f) * entry.get_wrt_space(); +// float from_radius = length(from_radius_v); + + const LMatrix4f *pMat = &entry.get_wrt_space(); + float from_radius = sphere->get_radius() * + sqrtf((*pMat)(0,0)*(*pMat)(0,0) + + (*pMat)(0,1)*(*pMat)(0,1) + + (*pMat)(0,2)*(*pMat)(0,2)); + +// if (dist > from_radius || dist < -from_radius) { + if (fabs(dist) > from_radius) { // No intersection. return 0; } @@ -257,7 +265,9 @@ test_intersection_from_sphere(CollisionHandler *record, bool really_intersects = get_plane().intersects_line(plane_point, from_center, from_center + get_normal()); +#ifdef _DEBUG nassertr(really_intersects, 0); +#endif LPoint2f p = to_2d(plane_point); diff --git a/panda/src/collide/collisionSphere.cxx b/panda/src/collide/collisionSphere.cxx index 9388327b21..f3fb01cc10 100644 --- a/panda/src/collide/collisionSphere.cxx +++ b/panda/src/collide/collisionSphere.cxx @@ -123,8 +123,6 @@ test_intersection_from_sphere(CollisionHandler *record, const CollisionSphere *sphere; DCAST_INTO_R(sphere, entry.get_from(), 0); - LPoint3f from_center = sphere->get_center() * entry.get_wrt_space(); - //from_radius_v = LVector3f(sphere->get_radius(), 0.0, 0.0) * entry.get_wrt_space(); //float from_radius = length(from_radius_v); @@ -134,7 +132,9 @@ test_intersection_from_sphere(CollisionHandler *record, (*pMat)(0,1)*(*pMat)(0,1) + (*pMat)(0,2)*(*pMat)(0,2)); + LPoint3f from_center = sphere->get_center() * entry.get_wrt_space(); LVector3f vec = from_center - _center; + float dist2 = dot(vec, vec); float total_radius = _radius + from_radius;