如果相机的眼睛可以看到threejs对象,我怎样才能尽快检测到?obj.visible属性是一个 setter,所以没用。frustumCullum也是不够的,因为它仅指示对象是否在相机视口之外。我需要知道一个对象是否隐藏在另一个更大的对象后面。
有人有想法吗?
干杯
马库斯
如果相机的眼睛可以看到threejs对象,我怎样才能尽快检测到?obj.visible属性是一个 setter,所以没用。frustumCullum也是不够的,因为它仅指示对象是否在相机视口之外。我需要知道一个对象是否隐藏在另一个更大的对象后面。
有人有想法吗?
干杯
马库斯
也许你可以使用 THREE.Raycaster()?
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
// find the object by name? intersects[0].
// Hidden if index > 0
}
您可以使用 RayCaster 向您感兴趣的对象发射光线,然后检查数组 raycaster.intersectObjects([]) 返回。快速大纲可能如下所示:
var raycaster = projector.pickingRay( objectScreenPositionVector, camera );
var intersects = raycaster.intersectObjects( ObjectsArray ); //the objects you're interested in.
intersects 将按距离排序,最近的在前。
网上有很多关于三选一的教程,AFAIK,这是一个相对有效的操作。我快速浏览了http://soledadpenades.com/articles/three-js-tutorials/object-picking/以刷新我对命令名称的记忆。