[ODE] Body Position becoming #QNAN
Gary R. Van Sickle
g.r.vansickle at worldnet.att.net
Thu Apr 7 17:19:06 MST 2005
> Actually, I'm having kind of a similar problem. I have
> successfully added continuous collision to ODE and it works
> great.
OMGOMGOMG... *PLEASE* submit this for inclusion!
--
Gary R. Van Sickle
> To do that I have to basically do a predictive time
> stepping method.. so my stepWorld loop looks like this...
>
> - Get the first time of impact with any object in scene.
> - simulate slightly past that time ( to cause penetration )
> - resolve collision
> - simulate enough so that the penetrations are resolved.
> - go back to step one...
>
> This works wonders and I can shoot an object at any speed and
> be rest assured it will never exit the world.
> The problem is similar, if I simulate this for some cases...
> (reproduceable) but I cannot pin point when.. the body pos
> goes to Qnans
>
> I'm trying to debug this. I feel this has to do with me
> sending the quickstepper function a very small dt and then
> the quickstepper trying to iterate and further subdivide this
> dt.. any info along these lines would be greatly appreciated...
>
> Thanks
> gopi
>
> -----Original Message-----
> From: Vincent Mysliwiec [mailto:vincent_mysliwiec at hotmail.com]
> Sent: Thursday, April 07, 2005 12:22 PM
> To: ode at q12.org
> Subject: [ODE] Body Position becoming #QNAN
>
>
> I'm making a ball racing game and am experiencing some
> reproducible weirdness. However, I cannot solve the bug. The
> player controls a sphere marble with a sphere body and on
> some places within a trimesh collision the body's position
> goes to QNAN - not a number. I'm using single precision
> floating point resolution. And here's a code snippet where I
> get/update the mesh body position based on the ODE::body position
>
> void UpdateRigidBody(...) // called once every frame
>
> {
>
> ...
>
> Vector3D* theBodyPosPtr = (Vector3D*)dBodyGetPosition(theBodyID);
>
> memcpy(&theBodyPosition, theBodyPosPtr, sizeof(Vector3D));
>
> float theNANFloat = std::numeric_limits<float>::quiet_NaN();
>
> if (memcmp(&theBodyPosition.x, &theNANFloat, sizeof(float)) == 0)
>
> assert(false)
>
> if (memcmp(&theBodyPosition.y, &theNANFloat, sizeof(float)) == 0)
>
> assert(false)
>
> if (memcmp(&theBodyPosition.z, &theNANFloat, sizeof(float)) == 0)
>
> assert(false)
>
> theMesh->SetPosition(theBodyPosition);
>
> }
>
> Some obvious questions include:
>
> (a) has anybody else seen this before? (b) am i getting
> position correctly?
>
> Any help is appreciated!
>
> Vincent
>
>
> _______________________________________________
> ODE mailing list
> ODE at q12.org
> http://q12.org/mailman/listinfo/ode
More information about the ODE
mailing list