J'ai réussi à importer une scène .dae via ColladaLoader.Three.js Collada - Quelle est la bonne façon de disposer() et libérer de la mémoire (garbage collection)?
Le problème est, j'ai besoin de basculer entre plusieurs fichiers .dae.
Je n'arrive pas à implémenter correctement la méthode d'élimination.
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);
Que pourrais-je faire de mal?
Merci beaucoup d'avance!
EDIT:
est ici tout le 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! C'est assez complet! Je vais vérifier dans un peu. Merci d'avoir pris le temps de répondre! –
Je veux aussi savoir si la réponse est basée sur votre propre recherche ou si vous avez des sources. Merci encore! –
Super réponse! J'ai été capable de libérer 700 Mo + en utilisant la fonction disposeHierarchy()! Juste un homme génial. Merci beaucoup. J'espère que cette réponse aide les autres aussi. –