RayCaster перестает обнаруживать объект, когда я вызываю camera.lookAt ()

Я вызываю это всякий раз, когда нажимаю на сцену.

function onMouseDown(event) {
    controls.update();
    var position = new THREE.Vector3();
    position.setFromMatrixPosition( scene.group.children[0].matrixWorld );
    position.normalize();
    console.log(position);

    var raycaster = new THREE.Raycaster(); // create once
    var mouse = new THREE.Vector2(); // create once

    mouse.x = ( event.clientX / renderer.domElement.width ) * 2 - 1;
    mouse.y = - ( event.clientY / renderer.domElement.height ) * 2 + 1;
    //console.log(mouse);

    raycaster.setFromCamera( mouse, camera );

    console.log(raycaster.ray.direction);

    var intersects = raycaster.intersectObjects( scene.group.children , false );
    if ( intersects.length > 0 ) {
        intersects[ 0 ].object.material.color.set( 0xff0000 );
        console.log(intersects);
    }
}

изначально, когда я не применял вращение, щелчок работает, но как только я звоню

scope.target.x = offset * Math.sin( (scope.phi + iphi) * Math.PI / 180 ) * Math.cos( (scope.theta + itheta) * Math.PI / 180 );
scope.target.y = offset * Math.cos( (scope.phi + iphi) * Math.PI / 180 );
scope.target.z = offset * Math.sin( (scope.phi + iphi) * Math.PI / 180 ) * Math.sin( (scope.theta + itheta) * Math.PI / 180 );

scope.camera.lookAt( scope.target );

RayCaster не возвращает никаких объектов.

Я также заметил, что мой Raycaster дает одинаковый вектор направления в одном и том же месте экрана даже после поворота.

Затем я попытался применить вращение на Raycaster вручную

var e = new THREE.Euler(((controls.phi-90)/180)*Math.PI, 0, (controls.theta/180)*Math.PI, 'XYZ');
raycaster.setFromCamera( mouse, camera );
raycaster.ray.direction.applyEuler( e );

но теперь я получаю пересечение в соседнем месте, а не в точном местоположении объекта.


person Gaurav Bansal    schedule 08.09.2016    source источник


Ответы (1)


Проблема заключалась в том, что я не обновлял мировые координаты на основе вызова вращения камеры.

camera.updateMatrixWorld();

на обновлении камеры решил проблему.

person Gaurav Bansal    schedule 29.09.2016