dividion by 0

binofet
Posts: 20
Joined: Fri Jun 15, 2007 5:03 pm

dividion by 0

Post by binofet »

In btHeightfieldTerrainShape::quantizeWithClamp( int* out, const btVector3& point )

Code: Select all

out[0] = (int)(v.getX() + v.getX() / btFabs(v.getX())* btScalar(0.5) );
out[1] = (int)(v.getY() + v.getY() / btFabs(v.getY())* btScalar(0.5) );
out[2] = (int)(v.getZ() + v.getZ() / btFabs(v.getZ())* btScalar(0.5) );
our world move is basically a collision object 'floating' on a raycast. if you are exactly at the 0 value of any axis of the heightmap world origin, the raytest will fail because v will have a 0 component and ultimately we divide by 0 and get a invalid quantized pos. this fixes it, but may not be the best solution.

Code: Select all

if (!btFuzzyZero(v.getX()))
     out[0] = (int)(v.getX() + v.getX() / btFabs(v.getX())* btScalar(0.5) );
else
     out[0] = 0;
if (!btFuzzyZero(v.getY()))
     out[1] = (int)(v.getY() + v.getY() / btFabs(v.getY())* btScalar(0.5) );
else
     out[1] = 0;
if (!btFuzzyZero(v.getZ()))
     out[2] = (int)(v.getZ() + v.getZ() / btFabs(v.getZ())* btScalar(0.5) );
else
     out[2] = 0;

a more elegant solution exists, but i don't have it :)

regards,

bino