【问题标题】:Grab objects near camera抓取相机附近的物体
【发布时间】:2014-05-30 15:10:21
【问题描述】:

我正在查看http://threejs.org/examples/webgl_nearestneighbour.html 并提出了一些问题。我看到他们使用 kdtree 来粘贴所有粒子位置,然后具有确定最近粒子并为其着色的功能。假设您有一个画布,其中包含大约 100 个缓冲几何图形和大约 72000 个顶点/几何图形。我知道这样做的唯一方法是获取缓冲几何的位置,然后将它们放入 kdtree 以确定最近的顶点并从那里开始。这听起来非常昂贵。

还有什么其他方法可以返回相机附近的对象。类似于 THREE.LOD 是如何做到的? http://threejs.org/examples/#webgl_lod 它可以查看物体的距离并根据您输入的设置渲染不同的级别。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    定义“昂贵”。 kdtree 的重点是快速找到最近的邻居元素,它的主要重点不是节省内存(尽管它在类型化数组上就地完成了所有工作,但在内存方面已经相当便宜了)。如果您需要节省内存,您可能必须找到另一种方法。 然而,长度为 21'600'000 的类型化数组确实有点长。我非常怀疑你必须在那里拥有每一个顶点。为什么不为每个几何零件设置一个位置参考点?而且,如果您需要获取与该点关联的顶点,则需要使用字典。然后你可以调用myGeometryVertices[geometryReferencePoint]

    Three.LOD 适用于光线投射。如果您有(几百个)可能运行良好的对象。如果你有几十万甚至几百万的职位,你会遇到一些麻烦。另外,如果您不使用网格;你不能光线追踪,例如一个粒子。

    真的只是用它们构建你自己的逻辑。这两者都没有提供适合所有情况的预构建解决方案。

    【讨论】:

    • 好吧,当我在飞机上移动时,我会根据传入的数据动态创建对象。这意味着我必须在移动时使用新项目重新创建一个 kdtree。目前对我来说,Raycast 听起来像是一个可行的解决方案。我的印象是它朝一个方向射击。它如何与您的 FOV 中的所有内容进行光线投射?另一方面,您似乎知识渊博。你几乎回答了我关于 THREE.js 的所有问题,并且给了我很大的帮助。如果您不介意,我还有其他问题可以通过其他方式与您聊天吗?
    • 啊,棘手。是的,这样做的一个不好的方法是每次出现新顶点时重新创建整个 kdtree ^^ 但是一个好主意可能是将几何图形分隔在具有位置参考点的区域中。一个仍在“建设中”的区域将始终处于高分辨率状态。当区域完成时,您为它构建一个 kdtree,因为每个区域都有自己的 kdtree。但这真的取决于你的情况,我相信你能想出一些办法:)
    • 谢谢。但是,我只是偶尔在我喜欢并且有时间的时候回答问题。我怀疑当你和我聊天时你会从我身上得到更多。进一步在 Stackoverflow 上,如果其他人遇到类似问题,他们可能会从您的案例中受益。在聊天中,讨论只会丢失......所以我倾向于说“不”,但如果你不能让它成为:我在 irc.freenode.com 上的#three.js,你会在那里找我和几个比我知识渊博的人:)
    • 使用位置的问题是,如果我有一些点被花键连接在一起,除非我靠近控制点,否则我无法真正判断这条线是否靠近我。
    • 嗯这个问题已经结束了,对吧?如果我没记错的话,你在 IRC 中得到了一些灵​​感
    猜你喜欢
    • 2017-03-13
    • 2015-05-05
    • 2017-04-18
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多