【发布时间】:2020-04-11 11:14:28
【问题描述】:
three.js Raycaster 示例展示了如何使用 intersectObjects 突出显示对象:
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
function onMouseMove( event ) {
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
}
function render() {
raycaster.setFromCamera( mouse, camera );
var intersects = raycaster.intersectObjects( scene.children );
for ( var i = 0; i < intersects.length; i++ ) {
intersects[ i ].object.material.color.set( 0xff0000 );
}
renderer.render( scene, camera );
}
window.addEventListener( 'mousemove', onMouseMove, false );
window.requestAnimationFrame(render);
https://threejs.org/docs/#api/en/core/Raycaster
但是,即使对象被另一个对象遮挡,这也会与对象相交。我创建了一个演示,显示您可以突出显示对象,即使它们位于球体对象后面:
https://codepen.io/kmturley/pen/gObgKee
注意在演示中如何突出显示球体后面的对象。 我们如何忽略被其他对象遮挡的对象?即使它们存在于 Camera Frustrum 中并由 Three.js 渲染?
我的用例是我实际上想隐藏球体背面的对象及其标签。
显示交叉点的示例:
【问题讨论】:
标签: javascript three.js 3d