Three.JS lookat

У меня есть объект, который смотрит на другой объект. Но когда я делаю свое обнаружение столкновения. Он не видит вращение, которое я хочу сделать с LookAt, Но он использует свое вращение по умолчанию. Почему он не использует вращение, которое я хочу сделать с LookAt?

Это проблема:

Синий - по умолчанию. Зеленый показывает синий с LookAt,

Почему LookAt не влияет на обнаружение столкновений?

Обнаружение столкновений: (Я делаю RTS-игру, поэтому использую только X и Z)

function collisionXZ(o1, o2) {
    if (Math.abs(o1.position.x - o2.position.x) > (o1.geometry.parameters.width + o2.geometry.parameters.width) / 2)
        return false;
    if (Math.abs(o1.position.z - o2.position.z) > (o1.geometry.parameters.depth + o2.geometry.parameters.depth) / 2)
        return false;
    return true;
}

1 ответ

Решение

THREE.Object3D.lookAt() изменяет rotation вашего объекта, а не его position,

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

Ваша функция выглядит как тест AABB, который (в большинстве случаев) используется только во время широкой фазы системы обнаружения столкновений. По сути, цель этого теста состоит в том, чтобы определить, какой объект может сталкиваться, чтобы избежать ненужных жадных тестов на столкновение, но сам по себе он не является настоящим тестом на столкновение.

Я думаю, что вам лучше использовать библиотеку для обнаружения столкновений, которая предоставляет примитивные тесты (Rectangle over Rectangle, Rectangle over Circle, ...)

Другие вопросы по тегам