ThreeJS:如何检测对象是否被渲染/可见

4
我该如何尽快检测出一个threejs对象是否对相机视野可见?obj.visible属性是一个setter,所以没有用。而且frustumCullum也不够,因为它只能指示对象是否超出了相机视口。我需要知道一个对象是否被另一个更大的对象遮挡。
有人有想法吗?
谢谢
马库斯

这个问题在这里被@mrdoob很好地回答了:https://dev59.com/AmMm5IYBdhLWcg3wbug1 - lazd
2个回答

5
也许您可以使用THREE.Raycaster()?
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
    // find the object by name? intersects[0].
    // Hidden if index > 0
}

问题在于,如果它的 obj.visible = false 或父级 par.visible = false,则会出现问题。 - Rooki

2

您可以使用 RayCaster 对感兴趣的对象进行射线投射,然后检查数组 raycaster.intersectObjects([]) 返回的结果。一个简单的概述可能如下:

var raycaster = projector.pickingRay( objectScreenPositionVector, camera );
var intersects = raycaster.intersectObjects( ObjectsArray ); //the objects you're interested in.

相交的物体将会按照距离排序,最近的在前。

网上有很多关于在 Three 中进行拾取的教程,据我所知,这是一个相对高效的操作。我快速查看了一下http://soledadpenades.com/articles/three-js-tutorials/object-picking/来刷新我的记忆,了解命令名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接