From 98f6c845b99d06751cd72710968f1a054a124962 Mon Sep 17 00:00:00 2001 From: cxgeorge <> Date: Mon, 11 Jun 2001 08:05:07 +0000 Subject: [PATCH] more small opts --- panda/src/collide/collisionPlane.cxx | 14 ++++++++++---- panda/src/collide/collisionPolygon.cxx | 20 +++++++++++++++----- panda/src/collide/collisionSphere.cxx | 4 ++-- 3 files changed, 27 insertions(+), 11 deletions(-) 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;