Успешное обнаружение.
введите здесь описание изображения
Неправильное обнаружение столкновений
введите здесь описание изображения
Я ссылался на следующий веб-сайт.
https://winter.dev/articles/gjk-algorithm
Я не смог найти подобных случаев сбоя на других веб-сайтах.
Однако ни один из операторов if в моей программе никогда не выполняется. Возможно, в этом проблема. Эта часть практически является копией кода с сайта выше.
Код: Выделить всё
bool Colider::Tetrahedron(Simplex& simplex, glm::vec3 dir)
{
glm::vec3 a = simplex[0];
glm::vec3 b = simplex[1];
glm::vec3 c = simplex[2];
glm::vec3 d = simplex[3];
glm::vec3 ab = b - a;
glm::vec3 ac = c - a;
glm::vec3 ad = d - a;
glm::vec3 point = -a;
glm::vec3 abc = glm::cross(ab, ac);
glm::vec3 acd = glm::cross(ac, ad);
glm::vec3 adb = glm::cross(ad, ab);
if (sameDirection(abc, point))
{
simplex = { a,b,c };
return Triangle(simplex, dir);
}
if (sameDirection(acd, point))
{
simplex = { a,c,d };
return Triangle(simplex, dir);
}
if (sameDirection(adb, point))
{
simplex = { a,d,b };
return Triangle(simplex, dir);
}
return true;
}
PS.
При построении треугольного симплекса я обнаружил, что первая (последняя добавленная) и вторая вершины одного треугольника имели одинаковые координаты. Это привело к включению нулевого вектора при проверке начала координат внутри симплекса и при анализе тетраэдров. Возможно, это привело к уменьшению размеров симплекса (от треугольного симплекса к отрезку прямой или от тетраэдрического симплекса к треугольнику).
Подробнее здесь: https://stackoverflow.com/questions/790 ... g-properly
Мобильная версия