• FEATURED

View more

View more

View more

Image of the Day Submit

IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

climbing stairs and hills with bullet physics

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

4 replies to this topic

#1ic0de  Members

Posted 13 September 2012 - 08:10 PM

I made a custom dynamic character controller in bullet physics. The problem is he cant climb stairs or hills. The character is based on a btMultiSphereShape and casts a ray down to find out what its standing on, if its on the ground and not walking its set to decelerate very quickly. Its moved around using setLinearVelocity. Works fine on flat surfaces. When it tries to climb stairs it just bumps into the bottom step, when it goes up a hill it moves a bit but doesn't seem to have enough energy behind it to go all the way up (needs more torque?).

Does anyone know how I can implement stair and hill climbing in bullet physics without using a kinematic character controller.

I'm sorry for not being very specific but I don't really know what I'm doing because bullet is such a badly documented api.

Thanks

Edited by ic0de, 14 September 2012 - 03:21 PM.

Currently working on new DOS game, Chuck Jones: Space Cop of the Future, Check out my Dev Blog

you know you program too much when you start ending sentences with semicolons;

#2Freya  Members

Posted 14 September 2012 - 03:45 PM

I think you maybe need to give it a little jump in order to climb. Try setting some small value upwards together with linear velocity, like this:

moveDirection = mvec3d(0,2,0);
body->setLinearVelocity(body->getLinearVelocity() + moveDirection);


#3ic0de  Members

Posted 14 September 2012 - 05:14 PM

I think you maybe need to give it a little jump in order to climb. Try setting some small value upwards together with linear velocity, like this:

moveDirection = mvec3d(0,2,0);
body->setLinearVelocity(body->getLinearVelocity() + moveDirection);


Wow that works surprisingly well but it would probably be better if the upward velocity was only added when an incline was detected. Really if somehow I could get my controller to figure out the angle of what its standing on then all my problems could be solved.

Anyone know how to get the angle of the surface from a raycast?
Currently working on new DOS game, Chuck Jones: Space Cop of the Future, Check out my Dev Blog

you know you program too much when you start ending sentences with semicolons;

#4Bacterius  Members

Posted 15 September 2012 - 09:48 AM

Anyone know how to get the angle of the surface from a raycast?

The angle of the surface is fully encoded in its surface normal - wouldn't the raycast return the intersected object and hence its normal? You probably only care about the inclination angle (not the azimuth angle which exists in three dimensions, which describes which direction the surface is "pointing towards" horizontally - like a compass placed on a horizontal surface, if that makes sense). In two dimensions, it's simple - your inclination gradient is just rise over run -> normal.y / normal.x so the angle is arctan(normal.y / normal.x) with some trigonometry. In three dimensions, it's more complicated but you can convert your normal coordinates to spherical coordinates and extract the inclination angle (usually marked theta) and go from there.

Edited by Bacterius, 15 September 2012 - 09:49 AM.

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

#5ic0de  Members

Posted 15 September 2012 - 05:53 PM

In two dimensions, it's simple - your inclination gradient is just rise over run -> normal.y / normal.x so the angle is arctan(normal.y / normal.x) with some trigonometry.

Thanks for the math it's one area where I am somewhat lacking.
Currently working on new DOS game, Chuck Jones: Space Cop of the Future, Check out my Dev Blog

you know you program too much when you start ending sentences with semicolons;

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.