removed color; added test_intersection

This commit is contained in:
Dave Schuyler 2006-05-03 00:56:32 +00:00
parent f105fc0365
commit 162d7a5808
1 changed files with 27 additions and 19 deletions

View File

@ -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();