Pomyślnie zaimportowałem scenę .dae przez ColladaLoader.Three.js Collada - Jaki jest właściwy sposób na pozbycie się() i zwolnienie pamięci (odśmiecanie)?
Problem polega na tym, że muszę przełączać się między kilkoma plikami .dae.
Nie mogę poprawnie wdrożyć metody usuwania.
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);
Co mógłbym robić źle?
Dziękuję bardzo z góry!
EDIT:
Oto cały kod.
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();
}
Wow! To całkiem wyczerpujące! Sprawdzę to trochę. Dziękujemy za poświęcenie czasu na odpowiedź! –
Chcę również wiedzieć, czy odpowiedź jest oparta na własnych badaniach, czy też masz jakieś źródła. Dzięki jeszcze raz! –
Niesamowita odpowiedź! Udało mi się uwolnić 700 MB + przy użyciu funkcji disposeHierarchy()! Po prostu niesamowity człowiek. Wielkie dzięki. Mam nadzieję, że ta odpowiedź pomoże także innym. –