По какой-то причине в приведенном ниже коде переменная «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 );
}
}