I'm working on a 3d virtual home project. everythings works fine except collision detection. I use PointerLockControls for my camera and movement. but i'm not sure how to detec collision in every possible directions. For simplicity i started with just forward and backward collision to a simple cube on (0,0,0):
rays = [
new THREE.Vector3(0, 0, 1),
new THREE.Vector3(0, 0, -1)
];
Then:
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);
}
}
But when i get close enough to my cube, console shows me both rays hit the cube! so why? Is there any problem with my rays? vector(0,0,1) should be backward and (0,0,-1) should be forward, right? Please help me, before i get lost in 3d! Thanks.