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, ...)