3D столкновение в OpenGL

Я пытаюсь создать коллизию для моего приложения OpenGL.

У меня есть код, который успешно проверяет, находится ли моя камера внутри объекта платформы:

void checkInsidePlatform()
{
float halfW = gymPlatform -> getW() / 2;
float Height = gymPlatform -> getH();
float halfD = gymPlatform -> getD() / 2;
float platformRight = gymPlatform -> getX() + halfW + 1;
float platformTop = gymPlatform -> getY() + Height + 1;
float platformFront = gymPlatform -> getZ() - halfD - 1;

if(testPlatformCollision())
{
//Below code doesnt work (NEED HELP HERE)
if(myCamera -> curPos -> x < platformRight)
{
myCamera -> curPos -> platformRight;
}
if(myCamera -> curPos -> z > platformFront)
{
myCamera -> curPos -> platformFront;
}
if(myCamera -> curPos -> y < platformTop)
{
myCamera -> curPos -> platformTop;
}
}
}

bool testPlatformCollision()
{
float halfW = gymPlatform -> getW() / 2;
float Height = gymPlatform -> getH();
float halfD = gymPlatform -> getD() / 2;
float platformLeft = gymPlatform -> getX() - halfW - 1;
float platformRight = gymPlatform -> getX() + halfW + 1;
float platformTop = gymPlatform -> getY() + Height + 1;
float platformFront = gymPlatform -> getZ() - halfD - 1;
float platformBack = gymPlatform -> getZ() + halfD + 1;

if((myCamera -> curPos -> x > platformLeft) && (myCamera -> curPos -> x < platformRight))
{
if((myCamera -> curPos -> z > platformFront) && (myCamera -> curPos -> z < platformBack))
{
if(myCamera -> curPos -> y < platformTop)
{
return true;
}
}
}

return false;
}

Но сейчас я застрял. Я не уверен, как переместить камеру за пределы платформы, если она идет внутрь.
Если камера находится внутри платформы, выполняются все 3 теста.

0

Решение

Вам необходимо выполнить разрешение столкновений. Разрешение коллизий — это акт разрешения коллизий, и он немного сложнее, чем просто выполнение логического выражения. IsColliding функция.

Дополнительная информация для поиска будет: Тест на разделительную ось (SAT). Поскольку вы имеете дело с AABB (предположительно), вы можете довольно легко составить простое разрешение, которое просто перемещает вашу камеру наружу.

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

Конечно, фактическая реализация становится немного более сложной.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector