出于某种原因,在下面的代码中,当我简单地单击一个对象时,“intersects”变量不包含 onDocumentMouseDown 事件处理程序中的任何项目。为了让它检测到点击的对象,我必须点击并轻轻拖动鼠标,然后它才能拾取点击的项目。如果这很重要,我也在使用轨迹球控制。我在这里有一个 jsfiddle 示例:http: //jsfiddle.net/marktreece/xvQ3f/
在 jsfiddle 示例中,单击多维数据集并注意颜色没有按预期更改。现在单击立方体,在释放鼠标按钮之前,稍微移动它,颜色就会改变。我怎样才能做到这一点,只需单击对象就足够了?
这是我的 mousedown 事件处理程序:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
projector.unprojectVector( vector, camera );
var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
var intersects = raycaster.intersectObjects( scene.children, true );
if ( intersects.length > 0 ) {
intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}
}