官网案例修改,适配非全屏点选情况
const raycaster = new THREE.Raycaster();
const pointer = new THREE.Vector2();
const container = document.getElementById('container')
function onPointerMove( event ) {
let getBoundingClientRect = container.getBoundingClientRect()
let px = getBoundingClientRect.left
let py = getBoundingClientRect.top
pointer.x = ((event.clientX - px) / container.offsetWidth) * 2 - 1
pointer.y = -((event.clientY - py) / container.offsetHeight) * 2 + 1
}
function render() {
raycaster.setFromCamera( pointer, camera );
const intersects = raycaster.intersectObjects( scene.children );
for ( let i = 0; i < intersects.length; i ++ ) {
intersects[ i ].object.material.color.set( 0xff0000 );
}
renderer.render( scene, camera );
}
window.addEventListener( 'pointermove', onPointerMove );
window.requestAnimationFrame(render);