[ODE] dxTriangle
gl
gl at ntlworld.com
Thu Mar 27 11:58:02 2003
Hi,
there's a decent sphere/triangle collider in my recent heightfield
contribution (work in progress, but the spheres seem to work well). Feel
free to use it.
http://r-i-l.net/_files/ODE/dHeightfield0.1b.zip
--
gl
----- Original Message -----
From: "Squint" <squint@squint.clara.co.uk>
To: <ode@q12.org>
Sent: Thursday, March 27, 2003 6:26 PM
Subject: [ODE] dxTriangle
> 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
>
> _______________________________________________
> ODE mailing list
> ODE@q12.org
> http://q12.org/mailman/listinfo/ode
>
>