Jump to content

  • Log In with Google      Sign In   
  • Create Account


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.

  • You cannot reply to this topic
4 replies to this topic

#1 ic0de   Members   -  Reputation: 804

Like
0Likes
Like

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.

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


Sponsor:

#2 Freya   Members   -  Reputation: 801

Like
1Likes
Like

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);

Working on a game "Burnt islands".
Dev blog       
"Burnt islands" on Indie DB

#3 ic0de   Members   -  Reputation: 804

Like
0Likes
Like

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?

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


#4 Bacterius   Crossbones+   -  Reputation: 8474

Like
2Likes
Like

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.

The slowsort algorithm is a perfect illustration of the multiply and surrender paradigm, which is perhaps the single most important paradigm in the development of reluctant algorithms. The basic multiply and surrender strategy consists in replacing the problem at hand by two or more subproblems, each slightly simpler than the original, and continue multiplying subproblems and subsubproblems recursively in this fashion as long as possible. At some point the subproblems will all become so simple that their solution can no longer be postponed, and we will have to surrender. Experience shows that, in most cases, by the time this point is reached the total work will be substantially higher than what could have been wasted by a more direct approach.

 

- Pessimal Algorithms and Simplexity Analysis


#5 ic0de   Members   -  Reputation: 804

Like
0Likes
Like

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.

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.



PARTNERS