我有一个3D散点图,用球体表示点,并尝试在点击时显示来自点的信息。基于Stack Overflow上几个不同问题的答案,我认为我走在了正确的道路上。以下是我的onCanvasMouseDown:
event.preventDefault();
mouse.x = ( (event.clientX - renderer.domElement.offsetLeft) / renderer.domElement.width ) * 2 - 1;
mouse.y = - ( (event.clientY - renderer.domElement.offsetTop) / renderer.domElement.height ) * 2 + 1;
mouse.z = 0.5;
projector.unprojectVector( mouse, camera);
raycaster.setFromCamera( mouse, camera);
var intersects = raycaster.intersectObjects( scene.children );
if( intersects.length > 0 ) {
intersects.map(function(d) {
if(d.object.name === "sphere") {
//etc...
}
})
}
但是,交集一直为空。我有一种感觉,问题与我设置鼠标坐标的方式有关,但我不确定如何解决这个问题。
编辑:如果我将绘图旋转,以便从上方查看它,似乎可以找到一个球体(但我需要能够检测它,而不管旋转如何)。这是否表示任何特定的东西?
setFromCamera()
需要2D鼠标坐标(来自https://threejs.org/docs/api/core/Raycaster.html)。问题可能在于`renderer.domElement.offset`,所以首先尝试不使用该代码。 - gaitatinterects
定义后立即记录它?如果没有,它返回什么? - Console-buchemouse.z = 0.5;
?? In all examples about intersection I've ever seen,mouse
is alwaysTHREE.Vector2()
, neverTHREE.Vector3()
- prisoner849intersectObjects
方法的recursive
参数:var intersects = raycaster.intersectObjects( scene.children, true );
。 - prisoner849