[ODE] dxTriangle
Squint
squint at squint.clara.co.uk
Thu Mar 27 11:25:02 2003
My apologies to the moderator(s) for taking 4 goes to get my sent-from
address right . . .
I've been lurking for a while - time I said "hi" anyway...
I have decided to write my own Triangle primitive for collision detection in
ODE, rather than using tri-collider and/or Opcode. As far as I can make out
the triangle is generating perfectly good normals, collision points and
penetration depths, but the behaviour of the system is far from stable.
My test case is a large triangle on the plane y = -4.0, and a radius 1.0
sphere which begins at y = 8.0 and travels towards it. The sphere is
attached to the origin with a piece of weak elastic, but this is incidental,
and causes no problems with sphere-sphere collisions (which, by the way, are
working fine).
Firstly, in my debug below, the velocity and accumulated force on the sphere
is always reported as 0. I have no idea why, since the elastic undoubtably
works, and the sphere definitely moves. I am obtaining it with
dBodyGetLinearVel and dBodyGetForce.
Secondly, if you follow the debug you will see that the sphere doesn't
bounce off the triangle - it simply ghosts through it, steadily
accelerating, untill the collision depth becomes close to the sphere radius,
and then it hurtles off in the negative y direction at ridiculously high
velocity.
Collision settings are:
contact.surface.mode = dContactBounce;
contact.surface.bounce = 0.0;
contact.surface.bounce_vel = 0.001;
the world ERP is 0.8 and the world CFM is the default.
the step size, out of desperation, is 0.001
I have tried a few settings for all of these and still get
similar results.
If I can get this working, and convert the triangle code to use ODE vector
maths rather than my own libraries without too much hassle, I will be more
than happy to contribute it!
Oh yes - Linux, gcc, ode version 0.035
Thankyou for any suggestions.
This is the relevant part of the debug output from my code:
********************************
* Just before the collision *
********************************
Before step:
position : 0.000000e+00 -2.999771e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
After step:
position : 0.000000e+00 -3.000180e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
Before step:
position : 0.000000e+00 -3.000180e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
*** COLLISION ***
Closest point in triangle to [ 0.0000 -3.0002 0.0000]
is [ 0.0000 -4.0000 0.0000]
distance = 0.999820
Collision normal is [ 0.0000 1.0000 0.0000]
collision depth of 0.000180
dCollide returned 1 contacts
After step:
position : 0.000000e+00 -3.000589e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
Before step:
position : 0.000000e+00 -3.000589e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
*** COLLISION ***
Closest point in triangle to [ 0.0000 -3.0006 0.0000]
is [ 0.0000 -4.0000 0.0000]
distance = 0.999411
Collision normal is [ 0.0000 1.0000 0.0000]
collision depth of 0.000589
dCollide returned 1 contacts
After step:
position : 0.000000e+00 -3.001060e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
********************************
* Skip a few steps to last one *
********************************
Before step:
position : 0.000000e+00 -3.681070e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
*** COLLISION ***
Closest point in triangle to [ 0.0000 -3.6811 0.0000]
is [ 0.0000 -4.0000 0.0000]
distance = 0.318930
Collision normal is [ 0.0000 1.0000 0.0000]
collision depth of 0.681070
dCollide returned 1 contacts
After step:
position : 0.000000e+00 -4.225925e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
Before step:
position : 0.000000e+00 -4.225925e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
After step:
position : 0.000000e+00 -4.770781e+00 0.000000e+00
vel : 0.000000e+00 0.000000e+00 0.000000e+00
force : 0.000000e+00 0.000000e+00 0.000000e+00
********************************
* After the last collision *
********************************
--
- Andy
mailto:andy@squint.clara.co.uk
http://www.squint.clara.co.uk