LINUX.ORG.RU

Гравитация в Bullet physic engine


0

1

Не могу понять в чем напортачил, вообщем физику подгружаю так:

//Initialise physic
mBroadphase = new btAxisSweep3(btVector3(-10000, -10000, -10000),
btVector3(10000, 10000, 10000), 1024);
mCollisionConfig = new btDefaultCollisionConfiguration();
mDispatcher = new btCollisionDispatcher(mCollisionConfig);
mSolver = new btSequentialImpulseConstraintSolver();
Globals::phyWorld = new btDiscreteDynamicsWorld(mDispatcher, mBroadphase,
mSolver, mCollisionConfig);
Globals::phyWorld->setGravity(btVector3(0, -9.8f, 0));
Globals::dbgdraw = new BtOgre::DebugDrawer(mSceneMgr->getRootSceneNode(),
Globals::phyWorld);
Globals::phyWorld->setDebugDrawer(Globals::dbgdraw);
Как видно, гравитация выставлена в -9.8, что должно соответствовать реальности, но не соответствует! При таком раскладе тела будто на марсе. Гравитация начинает походить на реальную при значениях от -30. Короче, либо у Bullet-а косяк, что мало-вероятно, либо я чего-то недопонимаю - чего?



Последнее исправление: vladmenshikov (всего исправлений: 3)

Оно?

By default, Bullet assumes units to be in meters and time in seconds. Moving objects are assumed to be in the range of 0.05 units, about the size of a pebble, to 10, the size of a truck. The simulation steps in fraction of seconds (1/60 sec or 60 hertz), and gravity in meters per square second (9.8 m/s^2).

If your objects are much bigger, and you use the default gravity, the simulation will appear in slow-motion. Try to scale down the objects to around 1 in meter units first.

http://bulletphysics.org/mediawiki-1.5.8/index.php/Scaling_The_World

kim-roader ★★
()

не знаю, откуда ты взял эти 10000, но у меня типа так:

    std::unique_ptr<btBroadphaseInterface> broadphase;
    std::unique_ptr<btDefaultCollisionConfiguration> collisionConfiguration;
    std::unique_ptr<btCollisionDispatcher> dispatcher;
    std::unique_ptr<btSequentialImpulseConstraintSolver> solver;
    std::unique_ptr<btDiscreteDynamicsWorld> dynamicsWorld;

    broadphase (new btDbvtBroadphase()),
    collisionConfiguration (new btDefaultCollisionConfiguration()),
    dispatcher (new btCollisionDispatcher(collisionConfiguration.get())),
    solver (new btSequentialImpulseConstraintSolver),
    dynamicsWorld (new btDiscreteDynamicsWorld(dispatcher.get(),
                                               broadphase.get(),
                                               solver.get(),
                                               collisionConfiguration.get())) {
    dynamicsWorld->setGravity(btVector3(0, -10, 0));
jeuta ★★★★
()
Ответ на: комментарий от kim-roader

http://bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_the_World

наверное, вот это более актуально

я, например, такие значения использовал

dynamicsWorld->stepSimulation(seconds, 17, 1.0/500.0);

при этом частота просчёта физики равна 500 Герц, а минимальная частота кадров, при которой всё верно в плане скорости ~29.41

jeuta ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.