ColladaLoaderで.daeシーンを正常にインポートしました。Three.js Collada - メモリを処分(ガベージコレクション)するにはどうすればよいですか?
問題は、いくつかの.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);
私は間違っている可能性がありますか?
ありがとうございます!
EDIT:
は、ここで全体のコードです。これは、仕事をする必要があります
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 = new THREE.PerspectiveCamera(20, 800/600, 1, 1000);
camera.position.set(0, -100, 50);
//camera.lookAt(scene.position);
controls = new THREE.TrackballControls(camera, renderer.domElement);
var light = new THREE.AmbientLight(0xffffff); // soft white light
scene.add(light);
threeAnimate();
}
function load(url) {
loader = new THREE.ColladaLoader();
loader.load(url, function (collada) {
dae = collada.scene;
scene.add(dae);
});
}
function unload() {
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);
}
var animFrame = null;
function animate() {
animFrame = requestAnimationFrame(threeAnimate);
renderer.render(scene, camera);
controls.update();
}
ワウ!それはかなり包括的です!私はちょっとそれをチェックします。答える時間をとってくれてありがとう! –
私は答えが自分の研究に基づいているのか、それとも何らかの情報源があるのかどうかを知りたい。再度、感謝します! –
驚くばかりの答え!私はdisposeHierarchy()関数を使って700MB +をリリースすることができました!ちょうど素晴らしい人。どうもありがとう。この回答が他の人にも役立つことを願っています –