Three.js用相机选择对象,没有鼠标

时间:2015-09-28 19:42:33

标签: javascript 3d three.js raycasting

在一个Three.js应用程序中,我想获得透视摄像头所指向的对象,并且这样做我读了raycaster文档。 我发现的所有文档都谈到了使用相机和来自鼠标坐标的Vector2进行光线投射,但我不想使用鼠标的2d坐标。相机可以出于任何原因旋转:点击并拖动屏幕,触摸控制甚至VR控制,我只想从透视摄像机的中心点进行光线投射,并将其设置为“选中”它所看到的对象。

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

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 :(得分: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