Физика пули: Тело движется после падения (дрожит и движется в сторону)

У меня есть проблема, которую я пытаюсь решить в течение нескольких дней.

Я пытаюсь сделать игру в боулинг, используя физику пуль, но булавка встряхивается, покачивается и перемещается в сторону после того, как я ее расположил, и она упала на пол.

Вот GIF того, что происходит:
http://imgur.com/7Mg41sf

Вот как я создаю Пин:

btCollisionShape* shape = createShape(pinVertices);
btScalar bodyMass = 1.6f;
btVector3 bodyInertia(0,0,0);
shape->calculateLocalInertia(bodyMass, bodyInertia);

btRigidBody::btRigidBodyConstructionInfo bodyCI = btRigidBody::btRigidBodyConstructionInfo(bodyMass, nullptr, shape, bodyInertia);
bodyCI.m_restitution = 0.7;
bodyCI.m_friction = 0.9f;

_physicsBody = std::unique_ptr<btRigidBody>(new btRigidBody(bodyCI));
_physicsBody->setUserPointer(this);

И вот как я создаю пол:

btCollisionShape* shape = createShape(laneVertices);
btScalar bodyMass = 0.0f;
btVector3 bodyInertia(0,0,0);
shape->calculateLocalInertia(bodyMass, bodyInertia);

btRigidBody::btRigidBodyConstructionInfo bodyCI = btRigidBody::btRigidBodyConstructionInfo(bodyMass, nullptr, shape, bodyInertia);
bodyCI.m_restitution = 0.6;
bodyCI.m_friction = 0.5;

_physicsBody = std::unique_ptr<btRigidBody>(new btRigidBody(bodyCI));
_physicsBody->setUserPointer(this);

Прямо сейчас пол btBoxShape и булавка является btConvexHullShape, но я попытался использовать цилиндр или конус, и они также скользят.

Несколько дней боролись, особенно если учесть, что сайт и форум Bullet Physics не работают.

3

Решение

Возможно, вам следует установить восстановление (отскок) штифта и пола на что-то меньшее (попробуйте сначала с 0,0). Это должно решить эту проблему, если штифт отскакивает.

Другая вещь, которую вы можете попробовать, — это деактивировать пин-код после его создания. Я не знаю в Bullet, но в JBullet это делается так:

body.setActivationState( CollisionObject.WANTS_DEACTIVATION );

Это остановит вашу булавку, пока какой-нибудь другой объект, такой как шар или другой булавка, не ударит его

1

Другие решения

Выглядит вполне разумно для меня. Твердое тело точно не отскочит и не разрушится.

У вас есть дальнейшие проблемы с несовершенным приближением реальности. Нижняя часть булавки, вероятно, плоская, что означает, что она теоретически мгновенно падает на пол в нескольких точках. Кроме того, из-за ограниченной точности FP, булавка не будет точно круглой, но тогда эта часть реалистична.

Таким образом, горизонтальные движения, вероятно, происходят из-за того, что небольшая доля свободного падения привела к небольшому отклонению от чистого вертикального падения. При ударе о землю этот компонент не был отменен, но трение при движении в конечном итоге остановило штифт. Так как штифт имел только небольшую горизонтальную скорость, трения было недостаточно, чтобы опрокинуть штифт.

2

По вопросам рекламы [email protected]