Пуля физический движок, как заморозить объект?
используя пулю 2.76 я пытаюсь заморозить объект (твердое тело), чтобы он мгновенно перестал двигаться, но все равно реагирует на столкновения.
Я попытался установить его состояние активации на DISABLE_SIMULATION, но тогда он практически не существует для других объектов. Кроме того, если объекты "сталкиваются" с ним, когда он отключен, начинают происходить странные вещи (объект падает через статические тела и т. д.)
Я полагаю, что временное преобразование его в статическое жесткое тело может работа, но есть ли существующий "родной" способ добиться этого на стороне пули?
Edit: есть ли способ отключить гравитацию для конкретного объекта?
6 ответов
документация немного отсутствует, но можно предположить, что метод ниже может быть использован для отключения гравитации на конкретном теле:
void btRigidBody::setGravity(const btVector3 &acceleration)
просто установите массу твердого тела в 0, затем она станет статической...
http://bullet.googlecode.com/svn/trunk/Demos/HelloWorld/HelloWorld.cpp
есть функции для btRigidBody
под названием setLinearFactor(x,y,z)
и setAngularFactor(x,y,z)
, которые позволяют ограничить движение вдоль определенной оси и вращение вокруг определенной оси соответственно. Вызов обеих функций со всеми 0
аргументы должны остановить все движение. Зову их снова со всеми 1
' s позволит движение снова.
установите состояние активации в ноль. Вот что происходит, когда объект спит, естественно. Гравитация и так далее не вступят в действие, пока не пробудятся снова.
rigidBody->setActivationState(0);
тогда, как и любой спящий объект, он будет разбужен при столкновении или если вы примените к нему силу.
чтобы этот метод остановил вашего актера, вы должны вызвать его каждый кадр обновления.
void StopActor()
{
m_pRigidBody->setLinearVelocity(btVector3(0,0,0));
}