Three.js выбрать объект с помощью камеры, без мыши

в приложении Three.js я хочу получить объект, на который указывает камера перспективы, и для этого я прочитал документацию raycaster. Все документы, которые я нашел, говорят о doind raycasting с камерой и Vector2 с координатами мыши, но я не хочу использовать 2d координаты мыши. Камера может вращаться по любой причине: щелкните и перетащите экран, сенсорное управление или даже управление виртуальной реальностью, я просто хочу выполнить raycast из центральной точки перспективной камеры и установить как «выбранный» объект, на который она смотрит.

Какие-либо предложения?


person ascallonisi    schedule 28.09.2015    source источник


Ответы (2)


THREE.Raycaster.set() ожидает origin и direction векторов:

origin - исходный вектор, из которого отбрасывается луч.

direction - вектор направления, задающий направление лучу. Следует нормализовать.

Установите мировое положение камеры как origin и его мировое направление как direction:

var raycaster = new THREE.Raycaster();

raycaster.set( camera.getWorldPosition(), camera.getWorldDirection() );

var intersects = raycaster.intersectObjects( objectsArray );
if ( intersects.length > 0 ) {
    //...
}
person Falk Thiele    schedule 28.09.2015

Код от Falk все еще работает, но Three.js (›r90) требует, чтобы вы указали цель [1]:

цель теперь требуется

Все, что вам нужно сделать, это:

let camera_world_pos = new THREE.Vector3();
let camera_world_dir = new THREE.Vector3();
let raycaster = new THREE.Raycaster();

camera.getWorldPosition(camera_world_pos);
camera.getWorldDirection(camera_world_dir);
raycaster.set(camera_world_pos, camera_world_dir);
let intersects = raycaster.intersectObjects( objectsArray );
if ( intersects.length > 0 ) {
    //...
}

[1] https://github.com/mrdoob/three.js/issues/12231

person markus    schedule 22.03.2021