Ich habe erfolgreich eine .dae-Szene über ColladaLoader importiert.Three.js Collada - Was ist die richtige Methode zum Entsorgen() und Freigeben von Speicher (Garbage Collection)?
Das Problem ist, ich muss zwischen mehreren .dae Dateien wechseln.
Ich kann nicht scheinen, die dispose-Methode richtig zu implementieren.
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);
Was könnte ich möglicherweise falsch machen?
Vielen Dank im Voraus!
EDIT:
Hier ist der gesamte Code.
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! Das ist ziemlich umfassend! Ich werde es gleich überprüfen. Danke, dass du dir die Zeit genommen hast zu antworten! –
Ich möchte auch wissen, ob die Antwort auf Ihrer eigenen Forschung basiert oder wenn Sie irgendwelche Quellen haben. Danke noch einmal! –
Super Antwort! Ich konnte 700MB + mit der Funktion disposeHierarchy() freigeben! Einfach toller Mann. Danke vielmals. Ich hoffe, diese Antwort hilft auch anderen. –