javascript - ThreeJS RayCasting 用于检测是否应该看到对象
问题描述
我有这个场景有数量荒谬的线对象(~80k+)。所以在我的电脑上进行一次渲染需要超过 15 秒(不确定是什么规格使它工作)但在我的工作电脑中它只是崩溃了选项卡(我假设在这种情况下 chrome 决定选项卡占用并杀死它)。
对于上下文:这个项目是一个 GCODE 查看器,它将做其他事情(不是资源密集型的),但取决于用户与场景的交互。用户将设置相机模式以将相机定位在工件周围,然后单击它(让它工作)。移动相机会花费大量时间或使选项卡崩溃。
对于那些不知道的人,在 3D 打印世界中,我们采用 3d 模型并将它们转换为机器指令,即 gcode,告诉打印机如何移动(类似于 CNC,但在 3d 中)。GCODE 就是它所需要的所有动作。这意味着我有大量代表运动的线条(不能组合它们)。他们在场景中不动,我的场景中也有一个带轨道控制的摄像机。该项目在使用少于 12k 的线对象渲染神时完美运行,加载时间约为 2 秒,并且移动流畅。
我意识到耗时最长的是渲染调用,它与场景中的对象数量有关。由于这是使用线条来表示对象,因此在用户移动相机并实际尝试查看它们之前,我不需要添加很多线条。如果我没有向场景中添加任何对象,并且仅在相机看到它们时添加/删除它们,它可能会改进,即动态加载看到的对象,在没有看到时卸载。
如何进行光线投射以检测相机是否应该看到物体?
我假设我需要一个相机可以看到的每个方向射线的方向向量,这可能意味着计算这可能很多,并且可能不是优化渲染以使浏览器不会杀死它的方法。
我也可以使用它来模拟相机在碎片周围移动以检测可见的线条,以及永远不可见的线条,因为它们不可用而将其删除。在添加它们或渲染之前这样做。
解决方案
推荐阅读
- thingsboard - 超过 5000 个数据点
- javascript - 无法自动填充复选框并选择字段
- ffmpeg - 如何将图像和音频合并为具有相同颜色的视频?(FFMPEG)
- sql - 如果我取消执行,我的查询是否需要“回滚”其更改
- ruby-on-rails - Ruby on Rails -> 数字海洋上的应用程序,Heroku 上的调度程序
- php - get_terms() 顺序不遵循层次结构
- java - OkHTTP 客户端:在重新部署应用程序时获取内存泄漏警告(tomcat)
- java - Micronaut 文档中的 REST 调用示例返回错误
- java - @PreAuthorize 注解不适用于 Spring 中的 JpaRepository
- r - Tensorflow:二进制分类结果全零或全一(网络本身没有训练)