2015-09-21 4 views
0

Возможно ли рассчитать минимальное расстояние между двумя CollisionObjects в Bullet Phyics?Расстояние между объектами в Bullet Physics

Как насчет вогнутых объектов? Возможно, для этого требуется выпуклое разложение?

Удобный калькулятор расстояний между объектами.

ответ

1

Как сообщила в библиотеке библиотека, в Bullet нет информации о положительном расстоянии link. Было бы легко извлечь эту информацию из тестов на столкновение, но вам нужно будет самостоятельно изменить обнаружение столкновения Bullet. Существует много алгоритмов столкновений для разных пар фигур, но каждый из них обрабатывает информацию о расстоянии на определенном этапе.

Однако есть еще один рекомендуемый способ получения приблизительного расстояния между двумя объектами. Вы можете сделать это, выполнив лучевой тест из центра первого объекта в центр второго, сохраните точку столкновения (он должен быть расположен на корпусе второго объекта). Затем вы выполняете обратный тест (от второго объекта до первого) и вычисляете расстояние между двумя сохраненными точками. Конечно, вам нужно проверить, действительно ли объект-хит тот, который вы хотите рассчитать. Это не сработает, если между ними есть препятствие.

Для выполнения лучевого теста вам нужен rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) метод btCollisionWorld. Пример использования можно найти here.

Если вы хотите, чтобы это было более точным, вместо того, чтобы бросать один луч, вы можете выполнить опрос сферы с использованием метода convexSweepTest.

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

+0

Большое спасибо @Est! Фактически, я сделал что-то похожее на то, что вы предложили, проверив столкновения между ограничивающей сферой с радиусом _augmented_, а затем добавьте логику для обработки точек контактного многообразия. Использование raytest обеспечило бы быстрые результаты, но оно потерпело бы неудачу в случае вогнутых объектов, чей ограничивающий центр не находится внутри объекта. – Nic