6

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 で迷子になる前に助けてください! ありがとう。

4

1 に答える 1