2
0
Эх сурвалжийг харах

whoops, logic error in clipping parabola to t1 and t2

David Rose 18 жил өмнө
parent
commit
3f4d1aada2

+ 16 - 10
panda/src/collide/collisionPlane.cxx

@@ -352,17 +352,23 @@ test_intersection_from_parabola(const CollisionEntry &entry) const {
       return NULL;
       return NULL;
     }
     }
 
 
-    if (t2 < parabola->get_t1() || t1 > parabola->get_t2()) {
-      // The intersection points are before the start of the parabola
-      // or after the end of the parabola.  The finite subset of the
-      // parabola is entirely in front of the plane.
-      return NULL;
-    }
-
-    // Choose one of the intersecting points.
-    t = t1;
-    if (t < parabola->get_t1()) {
+    if (t1 >= parabola->get_t1() && t1 <= parabola->get_t2()) {
+      if (t2 >= parabola->get_t1() && t2 <= parabola->get_t2()) {
+        // Both intersection points are within our segment of the
+        // parabola.  Choose the first of the two.
+        t = min(t1, t2);
+      } else {
+        // Only t1 is within our segment.
+        t = t1;
+      }
+      
+    } else if (t2 >= parabola->get_t1() && t2 <= parabola->get_t2()) {
+      // Only t2 is within our segment.
       t = t2;
       t = t2;
+      
+    } else {
+      // Neither intersection point is within our segment.
+      return NULL;
     }
     }
   }
   }