И теперь, после некоторой работы, я наконец-то понял, как создаются ограничивающие тома KDop и как пересекаются коллизии, и я создал их рабочую реализацию.
Теперь проблема в другом. : D
Как я могу пересечь (это должно быть возможно, или это не имело бы никакого смысла) 2 K-Dop различных значений K? (очевидно, мы заранее знаем, какая ось использовалась для создания этих 2 K-Dop.)
Например, как я могу пересечь DOP6 (AABB) и DOP14 (AABB + углы обрезаны)?
Или DOP14 (AABB + срезанные углы) и DOP26 (AABB + срезанные углы + обрезанные кромки)?
Простой метод (между KDOP с тем же K):
public Boolean Intersects(kDOP a, kDOP b)
{
// TODO : How to do if the K is not the same?
for (int i = 0; i < a.K / 2; i++)
if ((a.Min[i] > b.Max[i]) || (a.Max[i] < b.Min[i]))
return false;
return true;
}
Другой вопрос. Как сделать пересечение между KDOP и Сферой? КДОП и капсула? КДОП и ООБ? КДОП и ААББ? (это должно быть проще, если мы знаем, как поступить с разными K (поскольку AABB - это DOP6 в принципе))
Я имею в виду, каков общий способ сделать пересечение между этими простыми структурами?
Большое спасибо за ответы !!!
РЕДАКТИРОВАТЬ: Из какого-то поиска в сети кажется, что ось разделения - это путь, но я не могу найти никакой подробной информации о том, как реализовать это в K-DOP. : P
РЕДАКТИРОВАТЬ 2: У кого-то есть рабочая реализация теоремы об отделенной оси по KDOP? : |