Я успешно интегрировал библиотеку Bullet Physics в свою систему сущностей / компонентов. Сущности могут сталкиваться друг с другом. Теперь мне нужно дать им возможность столкнуться с ландшафтом, который является конечным и похожим на куб (например, InfiniMiner или его клон Minecraft ). Я только начал использовать библиотеку Bullet Physics вчера, так что, возможно, я упускаю что-то очевидное.
До сих пор я расширил RigidBody
класс, чтобы переопределить checkCollisionWith(CollisionObject co)
функцию. На данный момент это просто простая проверка происхождения, а не использование другой формы. Я повторю это позже. На данный момент это выглядит так:
@Override
public boolean checkCollideWith(CollisionObject co) {
Transform t = new Transform();
co.getWorldTransform(t);
if(COLONY.SolidAtPoint(t.origin.x, t.origin.y,t.origin.z)){
return true;
}
return false;
}
Это прекрасно работает, поскольку обнаруживает, когда происходят столкновения. Однако это не обрабатывает реакцию на столкновение. Кажется, что по умолчанию реакция на столкновение состоит в том, чтобы переместить сталкивающиеся объекты за пределы форм друг друга, возможно, их AABB.
На данный момент форма местности представляет собой просто коробку размером с мир. Это означает, что сущности, которые сталкиваются с местностью, просто стреляют наружу за пределы этой ячейки мирового размера. Таким образом, ясно, что мне нужно либо изменить реакцию на столкновение, либо мне нужно создать форму, которая напрямую соответствует форме местности. Итак, какой вариант лучше и как мне его реализовать? Возможно, есть вариант, о котором я не думаю?
Следует отметить, что местность динамична и часто изменяется игроком.