• Advertisement
Sign in to follow this  

bouncing ball using Newton?

This topic is 3966 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm stumped. What's the trick to making a bouncing ball using Newton? Currently, my ball falls to the floor, rattles a bit, then stops. No real bounce. I set the body elasticity to 1.0. Am I misunderstanding the use of this parameter?

Share this post


Link to post
Share on other sites
Advertisement
Quote:
Original post by Gowerlypuff
What's the code you're using? We'd probably need to see that before we find out what's going on here.


I'm guessing that he is using the Newton physics engine. Although I was as confused as you at first [smile] EDIT: Sorry, maybe you were aware of that point ^^ I should probably go to sleep...

I've never used the Newton physics engine so can't help you there.

Share this post


Link to post
Share on other sites
Oops. I assumed that Newton was a household name around here. The physics engine I'm using is "Newton Game Dynamics v1.53".

BTW, I was able to solve the bounce problem. If anyone cares, you just need to add a callback something like this:


NewtonMaterialSetCollisionCallback(nWorld, id, id, NULL, NULL, HitMe, NULL);

....

//-----------------------------------------------------------------------------
int _cdecl HitMe (const NewtonMaterial* material, const NewtonContact* contact)
{
float pos[3];
float norm[3];
float dir0[3];
float dir1[3];
float speed;
float tan_speed0, tan_speed1;

NewtonMaterialGetContactPositionAndNormal(material, pos, norm);
speed = NewtonMaterialGetContactNormalSpeed(material, contact);

speed *= 1.9;

norm[0] *= speed;
norm[1] *= speed;
norm[2] *= speed;

NewtonAddBodyImpulse(rigidBodyBox, norm, pos);

tan_speed0 = NewtonMaterialGetContactTangentSpeed(material, contact, 0);
tan_speed1 = NewtonMaterialGetContactTangentSpeed(material, contact, 1);

NewtonMaterialGetContactTangentDirections(material, dir0, dir1);

tan_speed0 *= -0.5;
tan_speed1 *= -0.5;

dir0[0] *= tan_speed0;
dir0[1] *= tan_speed0;
dir0[2] *= tan_speed0;

dir1[0] *= tan_speed1;
dir1[1] *= tan_speed1;
dir1[2] *= tan_speed1;

NewtonAddBodyImpulse(rigidBodyBox, dir0, pos);
NewtonAddBodyImpulse(rigidBodyBox, dir1, pos);

return 1;
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement