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);
}
}
しかし、キューブに十分近づくと、コンソールに両方の光線がキューブに当たったことが表示されます! なぜ?私の光線に問題はありますか?vector(0,0,1) は後方、(0,0,-1) は前方である必要があります。3D で迷子になる前に助けてください! ありがとう。