在WebWorker中创建Three.js网格

时间:2016-02-10 18:19:32

标签: multithreading three.js web-worker

我正在尝试将尽可能多的Threejs计算卸载到Web Worker。当只是想让工人创建几何时,它似乎相对可行。但是,我仍然需要创建大量的网格,这意味着主线程上有一个沉重的循环。

是否可以将网格创建卸载到Web工作者并让主线程将其添加到场景中(准备好后)?

这个想法是让工作者根据一些数据创建一个网格数组,然后将它发送到主线程。

非常感谢

4 个答案:

答案 0 :(得分:0)

我目前愿意在我的一个项目中解决这个问题。如果您尚未开始使用,我建议您首先查看https://github.com/kripken/webgl-worker。有两个例子(一个简单,一个更复杂)可以帮助开始。

我将在稍后更新此答案,并提供有关如何将wegl-worker与three.js集成的更多详细信息,这可能需要比简单的webgl / worker实现更多的设置。

答案 1 :(得分:0)

不幸的是,THREEJS 3D对象(类)要“繁重”地用于工作程序中(即使我修补了Threejs lib以在工作程序中使用,对象也无法通过“工作程序线程”-“主线程”边界) )。

但是我成功地使用worker异步加载了相当大的对象。 为了方便起见,我使用Catiline.js。

这个想法是使用THREEJS对象的本机格式(和缓冲区几何),然后将其解析为worker内部的js对象。之后,您可以在主线程中使用THREE.ObjectLoader获取真实场景对象。这种方法的好处是将解析(大对象可能要花很长时间)移到背景中并最小化冻结。

我使用6个工作线程,随机选择一个工作线程,将数据url传递给它,并且还可以从XMLHttpRequest缓存中受益

答案 2 :(得分:0)

Threejs对象不能通过postMessage传递。

相反,我们希望通过Web套接字建立回到主页的连接。这应该让我们自由地传递任何需要的东西。

答案 3 :(得分:0)

该线程可能对您有所帮助...最近,我不得不对Three.js进行一些SSR,并且概念相似,希望您使用工作程序中的ObjectLoader解析缓冲区几何。

https://discourse.threejs.org/t/error-with-ssr-three-js-objects/8643