Three.js, PointerLock и обнаружение столкновений
Я работаю над проектом 3D виртуального дома. все работает нормально, кроме обнаружения столкновений. Я использую PointerLockControls для своей камеры и движения. но я не уверен, как обнаружить столкновение во всех возможных направлениях. Для простоты я начал с простого прямого и обратного столкновения с простым кубом по (0,0,0):
rays = [
new THREE.Vector3(0, 0, 1),
new THREE.Vector3(0, 0, -1)
];
Затем:
function detectCollision() {
var vector;
var projector = new THREE.Projector();
for (var i = 0; i < rays.length; i++) {
var vector = rays[i].clone();
projector.unprojectVector(vector, camera);
var rayCaster = new THREE.Raycaster(controls.getObject().position, vector.sub(controls.getObject().position).normalize());
var intersects = rayCaster.intersectObject(cube, true);
if (intersects.length > 0 && intersects[0].distance < 50) {
console.log(vector);
console.log(i, intersects);
$("#status").text("Collision detected @ " + rays[i].x + "," + rays[i].z +
"<br \>" + intersects[0].distance);
}
}
Но когда я подхожу достаточно близко к своему кубу, консоль показывает, что оба луча попали в куб! так почему? Есть ли проблемы с моими лучами? вектор (0,0,1) должен быть обратным, а (0,0, -1) должен быть вперед, верно? Пожалуйста, помогите мне, прежде чем я потеряюсь в 3D! Благодарю.