[ODE] collision detection/response without using ODE's collision engine
Ken M
Ken M" <wgold at flyingplastic.com
Sun Jun 9 09:10:02 2002
Your contact depth is 0, which I think will never result in a bounce, as
there is no interpenetration to recover from.
Ken
----- Original Message -----
From: <SkeedaddIer@aol.com>
To: <ode@q12.org>
Sent: Sunday, June 09, 2002 11:56 AM
Subject: [ODE] collision detection/response without using ODE's collision
engine
> Hi,
>
> I am confused as to how to do collision detection/response of SPHERE
> objects against PLANES, without using ODE's internal collision engine.
>
> For example, I am trying to hack the test_boxstack.cpp file to handle
> bouncing of spheres against the ground plane when the user presses 's'.
>
> What i did:
>
> 1) i removed the nearCallback function and the dSpaceCollide function
> that calls it
>
> 2) i defined a groundplane struct containing a dBodyID/dGeomID with a
> position of 0,0,0 and normal of 0,0,1
>
> groundplane.body = dBodyCreate(world);
> dBodySetPosition(groundplane.body, 0, 0, 0);
> groundplane.geom[0] = dCreatePlane (space,0,0,1,0);
>
> 3) during simLoop, i coded a simple test where:
>
> const dReal *p = dBodyGetPosition(obj[i].body);
> const dReal *v = dBodyGetLinearVel(obj[i].body);
>
> //vector3 is a personal vector lib I use, not part of ODE &
also
> well tested
> vector3 position = vector3(p[0], p[1], p[2]);
> vector3 velocity = vector3(v[0], v[1], v[2]);
> vector3 newposition = position + velocity;
>
> if((newposition.z - sphere.radius) <= 0.0f) {
> //..filled in dContact struct here - see 4) below...
> dJointID c = dJointCreateContact (world, contactgroup,
&contact);
> dJointAttach(c, obj[i].body, groundplane.body);
> }
>
>
> 4) this is how I filled my dContact struct:
>
> dVector3 contactposition = {newposition.x,
> newposition.y,
> (newposition.z -
> sphere.radius)};
>
> dVector3 contactnormal = {0.0, 0.0, 1.0};
>
> dContact contact;
>
> contact.surface.mode = dContactBounce; //dContactMu2;
> contact.surface.mu = dInfinity;
> contact.surface.mu2 = 0;
> contact.surface.bounce = 1.0;
> contact.surface.bounce_vel = 0.1;
>
> contact.geom.pos = contactposition;
> contact.geom.normal = contactnormal;
> contact.geom.depth = 0;
> contact.geom.g1 = obj[i].geom[0];
> contact.geom.g2 = groundplane.geom[0];
>
> 5) lastly i called dWorldStep as shown in the source.
>
> The spheres are not bouncing as they are expected to. Anyone have
> ideas what i may be doing wrong? Thanks in advance.
> _______________________________________________
> ODE mailing list
> ODE@q12.org
> http://q12.org/mailman/listinfo/ode