【问题标题】:Find the objects that a line intersects in three.js在three.js中找到一条线相交的对象
【发布时间】:2022-01-04 13:02:27
【问题描述】:

目前,我正在做一个 three.js 项目,我应该从板上选择两个框并绘制一条连接它们的直线,然后我必须突出显示该线相交的所有框。我现在最大的问题是如何找到线相交的框?

任何帮助将不胜感激(代码、链接、材料建议、数学公式)

【问题讨论】:

    标签: javascript math three.js


    【解决方案1】:

    您所描述的内容听起来像是在寻找Raycast

    你设置你的射线(它的位置和方向矢量),然后在对象上使用intersectObjects 来获得射线相交的盒子数组。

    【讨论】:

    • 感谢 Ivan,我认为 Raycast 只是为了显示鼠标指向的位置。所以显然我可以设置一个 Raycast 来指向一个对象相交的所有东西?这样我就必须为鼠标投射一个,为线路投射一个?
    • 我可以将光线投射设置到固定位置而不是鼠标吗?如果是这样,我可以将其位置设置为与该行相同。有没有可能?
    • 是的,您可以使用 2 个光线投射器。对于这一点,只需使用 .set() 而不是 .setFromCamera() threejs.org/docs/#api/en/core/Raycaster.set 将原点设置为其中一个点,将方向设置为两个点的矢量差,并丢弃任何沿射线更远的交点比第二点。
    • Diarmid,感谢您的澄清,我添加了第二个 raycaster,名为 raycaster2,但是,我得到了一个空数组。我更新了帖子上的代码。知道如何解决这个问题吗?
    • 当我 console.log(raycaster2) 我可以看到原点和方向是正确的。我真的不知道为什么我总是在 intersects2 上得到一个空数组
    【解决方案2】:

    在这种情况下,我真正需要的是 bresenhams 线算法,通过它我可以跟踪线穿过的所有不同点。

    发现于https://www.geeksforgeeks.org/bresenhams-line-generation-algorithm/

    感谢 Ivan 和 Diarmid,我知道我的代码一团糟,尽管如此,你还是试图帮助我。

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2015-10-13
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多