Bläddra i källkod

removed color; added test_intersection

Dave Schuyler 19 år sedan
förälder
incheckning
162d7a5808
1 ändrade filer med 27 tillägg och 19 borttagningar
  1. 27 19
      panda/src/collide/collisionDSSolid.cxx

+ 27 - 19
panda/src/collide/collisionDSSolid.cxx

@@ -56,6 +56,16 @@ make_copy() {
   return new CollisionDSSolid(*this);
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: CollisionDSSolid::test_intersection
+//       Access: Public, Virtual
+//  Description:
+////////////////////////////////////////////////////////////////////
+PT(CollisionEntry) CollisionDSSolid::
+test_intersection(const CollisionEntry &entry) const {
+  return entry.get_into()->test_intersection_from_ds_solid(entry);
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: CollisionDSSolid::xform
 //       Access: Public, Virtual
@@ -219,6 +229,7 @@ PT(CollisionEntry) CollisionDSSolid::
 test_intersection_from_sphere(const CollisionEntry &entry) const {
   const CollisionSphere *sphere;
   DCAST_INTO_R(sphere, entry.get_from(), 0);
+  cerr<<"CollisionDSSolid::test_intersection_from_ds_solid\n";
 
   CPT(TransformState) wrt_space = entry.get_wrt_space();
 
@@ -276,8 +287,8 @@ test_intersection_from_sphere(const CollisionEntry &entry) const {
 
   LVector3f surface_normal;
   LPoint3f surface_point;
-  float spheres = sa_distance_squared - sb_distance_squared;
-  float planes = pa_distance * pa_distance - pb_distance * pb_distance;
+  float spheres = sqrtf(sa_distance_squared) - sqrtf(sb_distance_squared);
+  float planes = pa_distance - pb_distance;
   if (spheres > planes) {
     if (spheres > 0) {
       // sphere_a is the furthest
@@ -359,7 +370,6 @@ fill_viz_geom() {
   PT(GeomVertexData) vdata = new GeomVertexData(
     "collision", GeomVertexFormat::get_v3cp(), Geom::UH_static);
   GeomVertexWriter vertex(vdata, InternalName::get_vertex());
-  GeomVertexWriter color(vdata, InternalName::get_color());
   
   PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static);
   // Generate the first endcap.
@@ -370,38 +380,36 @@ fill_viz_geom() {
     for (si = 0; si <= num_slices; ++si) {
       vertex.add_data3f(calc_sphere2_vertex(
           ri, si, num_rings, num_slices, -half_length, half_arc_angle_a));
-      //color.add_data4f(Colorf(1.0f, 0.0f, 0.0f, 1.0f));
-      color.add_data4f(1.0f, 0.0f, 0.0f, 1.0f);
       vertex.add_data3f(calc_sphere2_vertex(
           ri + 1, si, num_rings, num_slices, -half_length, half_arc_angle_a));
-      //color.add_data4f(Colorf(1.0f, 0.0f, 0.0f, 1.0f));
-      color.add_data4f(1.0f, 0.0f, 0.0f, 1.0f);
     }
     strip->add_next_vertices((num_slices + 1) * 2);
     strip->close_primitive();
   }
   
-  #if 0
-  // Now the planes.
-  for (si = 0; si <= num_slices; ++si) {
-    vertex.add_data3f(calc_sphere1_vertex(
-        num_rings, si, num_rings, num_slices));
-    vertex.add_data3f(calc_sphere2_vertex(
-        num_rings, si, num_rings, num_slices, half_length));
-  }
-  strip->add_next_vertices((num_slices + 1) * 2);
+  // Add plane A
+  vertex.add_data3f(Vertexf(-100, -100, 0));
+  vertex.add_data3f(Vertexf(-100, 100, 0));
+  vertex.add_data3f(Vertexf(100, -100, 0));
+  vertex.add_data3f(Vertexf(100, 100, 0));
+  strip->add_next_vertices(4);
+  strip->close_primitive();
+  
+  // Add plane B
+  vertex.add_data3f(Vertexf(-100, -100, 20));
+  vertex.add_data3f(Vertexf(-100, 100, 20));
+  vertex.add_data3f(Vertexf(100, -100, 20));
+  vertex.add_data3f(Vertexf(100, 100, 20));
+  strip->add_next_vertices(4);
   strip->close_primitive();
-  #endif
   
   // And the second endcap.
   for (ri = num_rings - 1; ri >= 0; --ri) {
     for (si = 0; si <= num_slices; ++si) {
       vertex.add_data3f(calc_sphere1_vertex(
           ri + 1, si, num_rings, num_slices, half_length, half_arc_angle_b));
-      color.add_data4f(Colorf(0.0f, 0.0f, 1.0f, 1.0f));
       vertex.add_data3f(calc_sphere1_vertex(
           ri, si, num_rings, num_slices, half_length, half_arc_angle_b));
-      color.add_data4f(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
     }
     strip->add_next_vertices((num_slices + 1) * 2);
     strip->close_primitive();