【问题标题】:select all objects in bounding box in three.js在three.js中选择边界框中的所有对象
【发布时间】:2013-05-15 07:37:09
【问题描述】:

我正在使用threex 中提供的出色代码来捕捉对场景中各种对象的点击,从而使我能够选择它们。这没有问题。

我想扩展选择功能,用户可以在其中绘制一个选择框(工作),并且我可以检测场景中在此选择中呈现的所有对象。

看threex/three,一般的onclick算法好像是:

  • 将鼠标坐标投射到Ray
  • 使用ray.intersectObjects(scene),它测试场景中的每个对象的射线 路口

这适用于系统中的单个“一维”射线,但似乎没有一种简单的方法可以修改它以使用选择框。

在我尝试扩展此机制以使用选择平截头体之前,是否有替代/现有设施?

【问题讨论】:

    标签: three.js


    【解决方案1】:

    您的问题的答案是否定的,没有这样的现有设施。

    我不会为此使用Raycaster.intersects()

    可能最简单的做法是为每个对象分配一个 2D screenCoords 属性,并将其设置为等于对象世界位置的屏幕投影。在这个网站上搜索如何做到这一点。

    然后,将那些screenCoords 位于屏幕空间选择框内的对象视为已选中。

    如果您需要完全包含,那么您必须对每个顶点执行上述操作,或者使用边界球之类的东西作为近似值。

    three.js r.58

    【讨论】:

    • 感谢@WestLangley 的回答。你能说得更详细些吗?我不确定你的意思是什么......
    • @Detuned 对不起,我不知道你不明白什么。如果您自己无法理解这些概念,我建议您在discourse.threejs.org 上提问。
    • 让我尝试布局我理解的部分和我不清楚的部分:1)每个对象都有一个 screenCoords 位置(x,y),它是模型的未投影坐标 2)给定边界框,检查对象的未投影坐标是否在该框内。你为什么不使用一些 k-d 树/八叉树模型来做到这一点?您能否在顶点级别而不是对象级别执行此操作?我需要选择给定边界框中的所有顶点。谢谢你,@WestLangley
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2013-02-04
    • 2021-05-28
    • 1970-01-01
    • 2021-07-10
    • 2014-02-08
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多