From 162d7a5808d48104f45bc3be27b32109404251ef Mon Sep 17 00:00:00 2001 From: Dave Schuyler Date: Wed, 3 May 2006 00:56:32 +0000 Subject: [PATCH] removed color; added test_intersection --- panda/src/collide/collisionDSSolid.cxx | 46 +++++++++++++++----------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/panda/src/collide/collisionDSSolid.cxx b/panda/src/collide/collisionDSSolid.cxx index fe1fddab9e..7e39d60f06 100755 --- a/panda/src/collide/collisionDSSolid.cxx +++ b/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();