【发布时间】:2021-03-08 03:21:40
【问题描述】:
我的想法是确定两个物体之间是否有任何障碍
现在这个障碍也可能是其他物体。
例如,我需要找到两扇门,如果它们之间有桌子、椅子等物体。
检查障碍物的方向也应该朝向目标。
在我的想法中添加更多内容,我可以使用对象的 dbid 来执行上述操作吗 所以如果我提供 2 个对象的 dbids,我有什么办法可以得到其他对象。
【问题讨论】:
标签: autodesk-forge autodesk-viewer autodesk
我的想法是确定两个物体之间是否有任何障碍
现在这个障碍也可能是其他物体。
例如,我需要找到两扇门,如果它们之间有桌子、椅子等物体。
检查障碍物的方向也应该朝向目标。
在我的想法中添加更多内容,我可以使用对象的 dbid 来执行上述操作吗 所以如果我提供 2 个对象的 dbids,我有什么办法可以得到其他对象。
【问题讨论】:
标签: autodesk-forge autodesk-viewer autodesk
我写了一个example,它做了类似的事情,但你的情况有点棘手。在此示例中,我使用从 PointA 到 PointB 的 THREE.Raycaster 并查找/计算这两个点之间的所有对象。
这种方法对于点对点方面来说既快又好。您的问题的复杂性是确定可以部分遮挡视线的各种形状的遮挡物体;如果部分遮挡视图,您仍然可以看到最终对象的一些顶点,但不是全部。这更像是一种 HLR 或光线追踪方法,需要大量时间来计算。 THREE.Raycaster 可以提供帮助,因为您仍然可以将网格作为参数传递,但这将是一个非常缓慢的过程,即使您使用查看器中的 BVH 树来消除该过程中的一些网格。
另一种方法是编写自定义着色器以使用 GPU 为您计算,这样会更快。不幸的是,我没有准备好这样的例子。如果点对点方法足够好,下面的代码应该会有所帮助。
我的例子的代码扩展位于here
【讨论】:
我编写了一个名为 ForgeFader 的示例应用程序,它使用光线投射来确定 RVT 模型中两点之间的墙数,两者都使用 Revit 桌面 API 和 Forge 查看器中的 three.js。
【讨论】: