当页面上只有一个目标div(包含renderer.domElement)时,我的Three.js脚本运行正常.只要我在目标div上方添加另一个固定高度和宽度的div,ray.intersectObjects就会返回null.我怀疑我为光线创建的矢量是否会导致问题.这是代码.
var vector = new THREE.Vector3( ( event.clientX / divWidth ) * 2 - 1, -( event.clientY / divHeight ) * 2 + 1, 0.5 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( myObjects, true );
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法.
编辑:现在是THREE.Raycaster (three.js r.56)
我有一个带有球体的 3D 散点图来表示点,我试图在单击时显示点的信息。基于对 SO 上几个不同问题的回答,我认为我走在正确的轨道上。这是我的 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...
}
})
}
Run Code Online (Sandbox Code Playgroud)
但相交不断返回空。我感觉问题与我设置鼠标坐标的方式有关,但我不确定如何解决该问题。
编辑:如果我旋转绘图以便我从上方查看它,我似乎能够找到一个球体(但无论旋转如何,我都需要能够检测到它)。这是否表明任何具体的事情?