Я пишу движок рендеринга анимации персонажей, который использует Bullet Physics в качестве движка физического моделирования.
Последовательность начнется без модели на экране, затем этой модели будет назначена анимация, модель будет перемещена в кадр 0 анимации, и движок начнет рендеринг модели с анимацией.
Как правильно переместить твердые тела на модели персонажа, когда она инициализирована в кадре 0?
В настоящее время я использую этот код, который вызывается сразу после того, как анимация назначается модели и кости перемещаются в позицию 0 кадра:
_world->removeRigidBody(_body);
bool k = (_type == Kinematics);
_body->setCollisionFlags(_body->getCollisionFlags() & ~btCollisionObject::CF_NO_CONTACT_RESPONSE);
btTransform tr = BulletPhysics::ConvertD3DXMatrix(&(_bone->getCombinedTrans()));
tr *= _trans;
_body->setCenterOfMassTransform(tr);
_body->clearForces();
_body->setLinearVelocity(btVector3(0,0,0));
_body->setAngularVelocity(btVector3(0,0,0));
_world->addRigidBody(_body, _groupID, _groupMask);
Проблема в том, что иногда это работает, а иногда нет. Для примера возьмем юбку модели. Иногда он появляется в естественном положении, иногда с небольшим смещением и упадет на место, а в других случаях он оказывается полностью разрезанным через тело, как если бы столкновение было отключено и какая-то сила толкнула его в этом направлении. В большинстве случаев это имеет смысл, потому что в тестовой анимации я использую исходное положение модели в центре экрана, но анимация начинается с левой стороны экрана. Кто-нибудь знает, как это решить?
Я знаю, что кости на юбке не проблема, потому что я отключил физику и заставил ее вручную обновлять положения костей в каждом кадре, и все было в правильных положениях на протяжении всей анимации.
РЕДАКТИРОВАТЬ: У меня также есть ограничения, может это быть причиной этого?