[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