2016-11-18 52 views
0

现在,我正尝试将多个“幻灯片”作为不同的div进行单页应用,除非它们是当前可见的幻灯片,否则它们是隐藏的。three.js在单个页面中正确重启场景webapp

一张幻灯片包含一个画布元素和一个ThreeJS场景。只要包含div( - >幻灯片)可见,此场景即被加载。

用户可以继续下一张幻灯片,其中不包含threejs场景。

用户可以用threejs场景回到幻灯片,但不需要保存场景的状态,场景应该完全重新加载。

现场现在全部成立,但实际上我没有找到任何适合我的问题的信息。我想知道什么是最好的方法首先是记忆方式,其次是彻底重置场景。

  • 我应该从场景中移除每个物体并在必要时再次添加它们吗?如果是这样,那么最好的方法是什么?
  • .dispose()上究竟发生了什么?
  • 是否有某种程序从一个场景中删除每个对象/组/纹理/材质/任何东西?并处置任何回忆?
  • 有什么我应该考虑重置场景时?

很多问题,我知道。但这些问题的很多答案都与旧版本有关,或者不再适用。任何答案真的很感激!

回答

1

,可能会给你提示的一些想法......

关于“隐藏”的场景

我会简单地停止rendering(调用渲染/动画循环),当div容器是不可见。

关于“展示”的场景再次

重装外部ressources(纹理,模型......)似乎毫无意义的,这取决于你的场景,重装一切可能为用户提供真正的痛苦。加载的内容应该保持可用于您的渲染器。如果你需要重置你的场景,你应该把它包装在一个init()函数中,当容器变得可见时再次调用。

使用工人

根据您的具体使用情况下,使用工人可以是一个好主意了。如果你的场景是由大量重文件组成的,那么确保页面的其余部分对用户可用(无冻结/断断续续),而加载是一个好主意。 Here are a few examples