用于在three.js中加载对象的Web worker

时间:2018-02-06 05:58:52

标签: javascript three.js web-worker

我想使用three.js和相应的Loader(例如PLYLoader)加载和解析3D文件。但是,由于我的3D文件非常大,Loader花费很长时间解析文件并锁定页面上所有基于JS的UI。我想知道加载文件的最佳方法是什么,而不是锁定UI。

我认为解决方案基于网络工作者。但是,我不确定最好的方法是什么。 Loaders需要主要的three.js文件,该文件又执行DOM操作。因此,我无法天真地将Loader功能复制到自己的Web工作器文件中。

我发现以前曾问过类似的问题。然而,答案似乎是专门针对纹理的情况,这似乎在网络工作者适用性方面存在差异。

Loading texture from Web Worker in Three.js

1 个答案:

答案 0 :(得分:2)

您实际上可以将加载功能包含到Web worker中。只需导入three.js和相应的加载器文件:

var {google} = require('googleapis');
var OAuth2 = google.auth.OAuth2; 
var oauth2Client = new OAuth2(  
  YOUR_CLIENT_ID,   
  YOUR_CLIENT_SECRET,   
  YOUR_REDIRECT_URL 
);
var drive = google.drive({ 
  version: 'v3',
  auth: oauth2Client
});

之后,您可以按照Three.js example.中的说明加载对象 更棘手的部分是将加载的对象重新放回主线程中以进行渲染。以Worker.postMessage and Transferable object为起点,看看这种方法。