我正在进行一个虚拟家庭三维项目。除了碰撞检测之外,一切都运作良好。我使用PointerLockControl来控制我的相机和移动,但是我不确定如何在每个可能的方向上检测碰撞。为简单起见,我从前后方向的碰撞开始,对位于(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之前帮助我!谢谢。