Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an upper limit on velocity when using box2d?

I'm using box2d for physics simulation. I'm moving a circle using arrow keys by applying impulse on the body when ever a key is pressed. Unfortunately, the circle moves excruciatingly slow and doesn't seem to accelerate like a true physical body is supposed to. My world's dimensions are 400x800 pixels. The radius of the circle body is 20f.

According to this, the problem can be solved by scaling the circle radius down when creating it and scaling up after getting the body position during painting. It doesn't seem to make any difference at all. Is there some step or setting I'm missing here ?

Code on pastebin

like image 629
ivymike Avatar asked Feb 08 '13 13:02

ivymike


2 Answers

It took me pretty long to understand that now, but there actually really IS a hard limit on velocity in Box2D. See here:

There is a maximum movement limit of 2.0 units per time step, given in the file b2Settings.h in the source code.

If you have one step per frame at 60FPS, then your bodies can move at a maximum speed of 120m/s. Maybe this will save somebody a bit of time one day.

like image 156
noone Avatar answered Nov 08 '22 23:11

noone


Yes, there is a difference between which size do you use. Box2d operates over floating point numbers and thus it's precision is limited and simulation quality differs. Box2d is tuned to work best with dynamic bodies of size 0.1 to 10.

So generally you should prefer to use one units for physics and other for graphics

Now to your question. Body's velocity is affected by collisions, friction (if one body is sliding over the other) and by linear damping. So check what value for linear damping do you use (it's non-zero by default as I remember). There are no velocity limitations, as far as I know, but higher velocity will provide less quality collisions if using the same time step.

like image 22
Andrew Avatar answered Nov 08 '22 21:11

Andrew