我正在开发一个允许用户切换包含不同网格对象的场景的three.js项目。它们在页面加载的同时加载到项目中,并且所有这些对象都具有严重影响性能的纹理。
为了解决这个问题,我想暂时删除用户选择了不的所有场景中的所有对象。因此,对于10个场景,例如用户应该选择查看场景4中的内容(这将是currentScene
),那么场景1到3和5到10应该没有放置的场景。表现上不必要的压力。这应该考虑页面加载的时间。只有当用户再次选择上述场景之一时,它才恢复场景。对象。
此FIDDLE是我的项目的一个示例,其中包含基本代码。我正在使用remove()
和dispose()
方法来实现它。
//scene that's to be removed and disposed of
var destroyScenes = scenes[1];
//removes and disposes all objects in above scene
for (i = destroyScenes.children.length - 1; i >= 0; i--) {
obj = destroyScenes.children[i];
destroyScenes.remove(obj);
obj.geometry.dispose();
obj.material.dispose();
obj.texture.
}
我的具体问题是这样的: 如果删除并处理它们,如何恢复对象?这是一个很好的方法吗,它是否可能,和/或是否有更好的方法来实现这一目标?
此外,如果这是一种方法,我如何选择除currentScene
以外的所有场景?
PS:我很清楚它会在场景之间切换加载时间,但我还是更喜欢它。
答案 0 :(得分:0)
如果我删除并处理它们,如何恢复对象? - 如果你正确处理对象,你必须再次加载它,这是丑陋的
这是一个很好的方法,它是否可行,和/或是否有更好的方法来实现这一目标?
- 如果您打算再次显示对象,最好设置obj.visible = false
;再次装载和处理是性能最差的方法。稍后加载对象后,有些事情(如雾等)无法正确应用。
此外,如果这是一种方法,我该如何选择除currentScene之外的所有场景? - 不确定问题,为此提出新问题。 (通过控制鼠标移动我猜)
我很清楚它会在场景之间切换加载时间,但我还是更喜欢这个。 - 这不是它的工作方式。场景正在同时运行,您可以停止非活动场景的动画帧。但场景会在初始化时加载,而不是在切换时加载。
总是只问一个问题。