gpt4 book ai didi

javascript - 如何正确处理 Three.js 场景? (r55)

转载 作者:可可西里 更新时间:2023-11-01 02:45:51 24 4
gpt4 key购买 nike

似乎 Three.js 没有一个很好的方法来处理 THREE.Scene 和该场景中的所有对象。

目前我正在做以下事情:

  $.each(scene.__objects, function(idx, obj) {                               
scene.remove(obj);
if (obj.geometry) {
obj.geometry.dispose();
}
if (obj.material) {
if (obj.material instanceof THREE.MeshFaceMaterial) {
$.each(obj.material.materials, function(idx, obj) {
obj.dispose();
});
} else {
obj.material.dispose();
}
}
if (obj.dispose) {
obj.dispose();
}
});

查看 Chrome 堆分析器,仍有许多对象没有被清理(纹理、着色器 Material 、矢量等...)。

最佳答案

我同意 arriu 的观点,three.js 中应该有一种更简洁和通用的内存处理方式,可能从场景节点开始,一直向下遍历。我还认为应该扩展他上面的泛型函数,以处理更多类型的内存分配。

  • 查看示例 webgl_test_memory.html,它做了一些非常针对该示例的事情,并在分配后立即释放内存。
  • 查看 webgl_test_memory2.html,此示例还做了一些非常具体的事情,它向数组添加网格,然后遍历并处理数组的元素。此方法无法处理在函数调用中进行的许多内存分配。

我并不是说这两个例子没有释放内存。我认为场景节点应该有一个方法来释放它下面的所有内存。

关于javascript - 如何正确处理 Three.js 场景? (r55),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com