首页 > 解决方案 > ThreeJS RayCasting 用于检测是否应该看到对象

问题描述

我有这个场景有数量荒谬的线对象(~80k+)。所以在我的电脑上进行一次渲染需要超过 15 秒(不确定是什么规格使它工作)但在我的工作电脑中它只是崩溃了选项卡(我假设在这种情况下 chrome 决定选项卡占用并杀死它)。

对于上下文:这个项目是一个 GCODE 查看器,它将做其他事情(不是资源密集型的),但取决于用户与场景的交互。用户将设置相机模式以将相机定位在工件周围,然后单击它(让它工作)。移动相机会花费大量时间或使选项卡崩溃。

对于那些不知道的人,在 3D 打印世界中,我们采用 3d 模型并将它们转换为机器指令,即 gcode,告诉打印机如何移动(类似于 CNC,但在 3d 中)。GCODE 就是它所需要的所有动作。这意味着我有大量代表运动的线条(不能组合它们)。他们在场景中不动,我的场景中也有一个带轨道控制的摄像机。该项目在使用少于 12k 的线对象渲染神时完美运行,加载时间约为 2 秒,并且移动流畅。

我意识到耗时最长的是渲染调用,它与场景中的对象数量有关。由于这是使用线条来表示对象,因此在用户移动相机并实际尝试查看它们之前,我不需要添加很多线条。如果我没有向场景中添加任何对象,并且仅在相机看到它们时添加/删除它们,它可能会改进,即动态加载看到的对象,在没有看到时卸载。

如何进行光线投射以检测相机是否应该看到物体?

我假设我需要一个相机可以看到的每个方向射线的方向向量,这可能意味着计算这可能很多,并且可能不是优化渲染以使浏览器不会杀死它的方法。

我也可以使用它来模拟相机在碎片周围移动以检测可见的线条,以及永远不可见的线条,因为它们不可用而将其删除。在添加它们或渲染之前这样做。

标签: javascriptthree.jsraycasting

解决方案


推荐阅读