Three.js使用相机选择对象,无需鼠标

3
在一个Three.js应用程序中,我想获取透视相机所指向的对象,并为此阅读了射线投射器文档。我找到的所有文档都是关于使用相机和来自鼠标坐标的Vector2进行射线投射的,但我不想使用鼠标的2D坐标。相机可以因为任何原因而旋转:点击并拖动屏幕、触摸控制甚至VR控制,我只想从透视相机的中心点进行射线投射,并将其所看的对象设置为“选定”。有什么建议吗?
2个回答

8

THREE.Raycaster.set() 需要 origindirection 向量:

origin — 射线从其发射的原点向量。

direction — 给出射线方向的方向向量。应该被归一化。

将相机的世界位置设为 origin,将其世界方向设置为 direction

var raycaster = new THREE.Raycaster();

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

var intersects = raycaster.intersectObjects( objectsArray );
if ( intersects.length > 0 ) {
    //...
}

1

来自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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接