如何在threejs中通过raycaster从相交检查中排除辅助对象?

Posted

技术标签:

【中文标题】如何在threejs中通过raycaster从相交检查中排除辅助对象?【英文标题】:How To exclude helper objects from intersection check by raycaster in threejs? 【发布时间】:2014-03-03 13:01:02 【问题描述】:

我有一个对对象进行交叉检查的threejs 场景。我将每个场景对象添加到数组中,然后由光线投射器检查。

var intersects = raycaster.intersectObjects( scene.children );

然后我检查对象的颜色并在与鼠标指针接触时更改它。

INTERSECTED.material.emissive.setHex( 0xff0000 );

如果我在场景中添加一个辅助对象,如 CameraHelperGridHelper,我会经常出错,因为辅助对象无法使用 .getHex .setHex

是否可以从该检查中排除辅助对象,我将如何做到这一点?

它必须类似于 scene.children - scene.helpers 但我无法想出办法来做到这一点。 感谢您的帮助。

【问题讨论】:

【参考方案1】:

创建一个您希望Raycaster 处理的对象数组。

var objects = [];

objects.push( mesh1 );
objects.push( mesh2 );

---

var intersects = raycaster.intersectObjects( objects, recursiveFlag );

three.js r.73

【讨论】:

非常感谢。如您所述,我将对象添加到场景和一个额外的数组中,并且只处理光线投射器中的额外数组。【参考方案2】:

据我了解,有两种解决方案:

https://threejs.org/docs/index.html#api/en/objects/Group https://threejs.org/docs/index.html#api/en/core/Layers

您可能不想为此使用 Group 的一个原因是,您可能正在使用 Group 将多个对象保持在一起,但您只想对 Group 中的某些对象进行光线投射测试。

【讨论】:

以上是关于如何在threejs中通过raycaster从相交检查中排除辅助对象?的主要内容,如果未能解决你的问题,请参考以下文章

ThreeJS:在PlaneBufferGeometry中查找相邻面

Three.js raycaster 可以与组相交吗?

ThreeJS中的点击与交互——Raycaster的用法

threejs raycasting - 相机和加载的 obj 模型之间的交集

使用threejs raycast的fabricjs点击角问题

three.js 给模型添加标注