在 three.js 中加载对象的网络工作者

Web workers for loading object in three.js

我想使用 three.js 和相应的加载器(例如 PLYLoader)加载和解析 3D 文件。但是因为我的3D文件很大,所以Loader解析文件的时间很长,把页面上的所有JS-based UI都给锁死了。我想知道在不锁定 UI.

的情况下加载文件的最佳方法是什么

我想解决方案是基于网络工作者。但是,我不确定处理它的最佳方法是什么。加载程序需要主 three.js 文件,该文件依次执行 DOM 操作。因此,我不能天真地将 Loader 功能复制到它自己的 web-worker 文件中。

我发现之前有人问过类似的问题。然而,答案似乎是专门针对纹理的,这似乎在 web-worker 适用性方面存在差异。

Loading texture from Web Worker in Three.js

您实际上可以将加载功能包含到网络工作者中。只需导入 three.js 和相应的加载程序文件:

myWorker.js
...
importScripts('/path/to/js/three.js', '/path/to/js/threeXYZLoader.js');

之后,您可以按照 Three.js example. 中所述加载您的对象 比较棘手的部分是将加载的对象返回到主线程中以便进行渲染。看看这个使用 Worker.postMessage and Transferable object 作为起点的方法。