我已经通过ColladaLoader成功导入了.dae场景.
问题是,我需要在几个.dae文件之间切换.
我似乎无法正确实现dispose方法.
dae.traverse(function(obj) {
console.log('unloading ' + obj.id);
scene.remove(obj);
if(obj.geometry)
obj.geometry.dispose();
if(obj.material)
obj.material.dispose();
if(obj.mesh)
obj.mesh.dispose();
if(obj.texture)
obj.texture.dispose();
});
scene.remove(dae);
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么?
非常感谢提前!
编辑:
这是整个代码.
var renderer = null;
var scene = null;
var camera = null;
var controls = null;
var dae = null;
//var loader = null;
function init() {
renderer = new THREE.WebGLRenderer( { alpha: 1, antialias: true, clearColor: 0xffffff } );
renderer.setSize( 800, 600 );
var elem = $('.main3d')[0];
elem.appendChild( renderer.domElement );
scene = new THREE.Scene();
camera …Run Code Online (Sandbox Code Playgroud) 我的应用程序加载了很多网格.摆脱旧网格我试图处理它们.但记忆永远不会被释放.
我错过了什么吗?
我复制的简单例子:
chrome任务管理器说使用250mb内存,它与没有第2步的情况完全相同
MEMTEST
var scene = new THREE.Scene();
var mymesh=Array();
// 1. load a lot of geometry/meshes...
for(var i=0;i<100;i++)
{
var bloader;
bloader = new THREE.BinaryLoader();
bloader.load( "objekte/presto_6.js" , function( geometry )
{
mymesh.push(new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( {color:0xffffff } ) ));
scene.add(mymesh.length-1);
});
}
// 2. try to dispose objects and free memory...
for(var j=0;j<mymesh.length;j++)
{
mymesh[j].geometry.dispose();
mymesh[j].material.dispose();
screne.remove(mymesh[j]);
}
mymesh=Array();
</script>
Run Code Online (Sandbox Code Playgroud)
当我使用scene.remove(网格)移除网格时,我有一些问题在三j中释放内存,网格被删除但似乎没有释放从js使用的内存.
我正在使用webglrenderer和缓冲几何来测量网格和窗口.