Это печально в его документах:
BtGhostObject может отслеживать все перекрывающиеся объекты. По умолчанию это перекрытие основано на AABB. Это полезно для создания контроллера персонажа, датчиков / триггеров столкновений, взрывов и т. Д.
Означает ли это, что это только AABB своей базовой сетки и, следовательно, обнаруживает только столкновения с AABB, а не сложную структуру сетки?
Для диспетчера столкновений нет разницы между призрачным объектом и твердым телом: они ведут себя одинаково как в широкой, так и в узкой фазе. Если вы выполните итерацию по массиву диспетчера, вы увидите правильные столкновения с объектами-призраками. Документация относится к btGhostObject
внутренний кеш перекрывающихся объектов, доступный через getOverlappingObject(int index)
/ getNumOverlappingObjects()
методы. Этот кеш заполняется в широкой фазе (таким образом, очевидно, что используется только AABB), и вы должны установить правильный обратный вызов пары, чтобы это работало (world->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback);
). Вы можете перебрать этот кеш в пост-тике и проверить фактические коллизии.
Других решений пока нет …