Pushing Objects in Bullet Physics

Started by
6 comments, last by Krohm 10 years, 7 months ago

I want to use ray casting to push objects further in bullet physics.

Basically, when the player use his weapon to shoot something like a chair, the chair should be pushed or even fall.

How do I accomplish that?

Advertisement

If the object is dynamic, just resolve the collision ray, cast the obtained object to btRigidBody and apply and impulse to it.

Ok, it's not so easy. Many things can go wrong:

  • I assumed the object was dynamic but that could be not the case in reality. It could fail to cast to btRigidBody or
  • it could still cast correctly but be a kinematic or static

In the end this will only work if the object is properly authored (but that's hopefully an easy assumption).

If the object is static... I suggest to give up. It's not impossible to destroy it and re-create it dynamic. It might even make some sense in many situations. It didn't in my last project and sure you need some static objects to stay static whatever happens to them. In general, there are artistic reasons for which some objects cannot move, beyond the technical.

Kinematics are the real trouble. I think there are good gameplay reasons for which they shouldn't be moved at all but in the past I had a long discussion with a designer that seemed to think otherwise. The main problem with pushing kinematics is what I dubbed "kinematic invariance problem". A kinematic object, when pushed should be working as a purely dynamic object. This is not the case: if you just write your own integrator, there's a high chance its behaviour won't match dynamic.

But I suppose you'll be happy with just pushing dynamics around, are you?

Previously "Krohm"

The object is dynamic, how do I apply impulse correctly so the object should be pushed according to the ray hit?

btRigidBody::applyCentralForce (but sometimes btRigidBody::applyCentralImpulse can be more "artist friendly").

Previously "Krohm"

The above methods doesn't move the object according to the hit point, I have btVector3 rayHitPoint

I'm trying to push the object according to the ray hit point so I can simulate firearm bullet hit on objects like a chair or plastic bottle

The above methods doesn't move the object according to the hit point, I have btVector3 rayHitPoint

I'm trying to push the object according to the ray hit point so I can simulate firearm bullet hit on objects like a chair or plastic bottle

Apply an impulse at the hit point in the direction of the ray.

-Josh

--www.physicaluncertainty.com
--linkedin
--irc.freenode.net#gdnet

@jjd: I tried that:


body->applyImpulse(rayHitPoint);

It doesn't work, though I also need to determine "how much impulse will be applied"


The above methods doesn't move the object according to the hit point, I have btVector3 rayHitPoint
Then I suppose you need applyImpulse or applyForce. You might have to start using the documentation sooner or later Medo.


It doesn't work, though I also need to determine "how much impulse will be applied"
You're really supposed to work with "force". The impulse is a different thing and does not make much sense in terms of realistic simulation but it comes handy for artistic purposes. The applied force depends on the game logic, in the real world it's often constant for bullets in the sense they are pushed out of the firearm with a known, fixed force.

Previously "Krohm"

This topic is closed to new replies.

Advertisement