0

can't get objects to be removed from a scene. using javascript threejs and i believe threejs uses css3d for rendering DOM elements in 3d

  var obj, i;
for ( i = scene.children.length - 1; i >= 0 ; i -- ) {
    obj = scene.children[ i ];
    if ( obj !== camera) {
        scene.remove(obj);
    }

is the code i was trying to use to remove the objects. I found that on another stackoverflow post.

here is some more of my code:

This is where some objects are added to the scene

    function init() {

    camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 5000);
    camera.position.z = 400;

    scene = new THREE.Scene();

    for (var i = 0; i < menu.length; i++) {
        var element = document.createElement('img');
        element.src = menu[i] + ".png";
        element.onclick = function (mymenu) {
            return function () {
                eval(
                        mymenu + "()"
                )
            }
        }(menu[i])


        var object = new THREE.CSS3DObject(element);
        object.position.x = Math.random() * 4000 - 2000;
        object.position.y = Math.random() * 4000 - 2000;
        object.position.z = Math.random() * 4000 - 2000;
        object.scale.x = 0.5;
        object.scale.y = 0.5;
        scene.add(object);
        objects.push(object);
        var object = new THREE.Object3D();
        object.position.x = window.innerWidth / 3.5 * -1;
        object.position.y = ( i * 240 ) - 50;
        grid.push(object);


    }


    renderer = new THREE.CSS3DRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.domElement.style.position = 'absolute';
    document.getElementById('container').appendChild(renderer.domElement);
    // document.body.appendChild( renderer.domElement );
    controls = new THREE.TrackballControls(camera, renderer.domElement);
    controls.rotateSpeed = 0.5;
    controls.addEventListener('change', render);
    transform(grid, 1000);
    window.addEventListener('resize', onWindowResize, false);


}

then some more get added in this function:

function torchlight2() {

    var j = 0;
    for (var i = 0; i < 3; i++) {
        var element = document.createElement('iframe');
        //element.src = 't.html';
        element.src = 'http://www.youtube.com/embed/' + torchlight2s[i];
        element.style.cssText = " -webkit-transform: translateZ(0);   -moz-transform: translateZ(0);            -ms-transform: translateZ(0);                -o-transform: translateZ(0);              transform: translateZ(0);            -webkit-backface-visibility: hidden;          -moz-backface-visibility: hidden;         -ms-backface-visibility: hidden;        backface-visibility: hidden;         -webkit-perspective: 1000;          -moz-perspective: 1000;         -ms-perspective: 1000;           perspective: 1000;             ";
        element.width = 320;
        element.height = 200
        var object = new THREE.CSS3DObject(element);
        object.position.x = Math.random() * 4000 - 2000;
        object.position.y = Math.random() * 4000 - 2000;
        object.position.z = Math.random() * 4000 - 2000;
        scene.add(object);
        objects.push(object);
        var object = new THREE.Object3D();
        object.position.x = ( i * 340 ) - 240;
        object.position.y = ( j * 240 ) - 150;
        object.position.z = -100;
        //targets.grid.pop();
        grid.push(object);
        transform(grid, 2000);
    }
}

Then when this one get's called i want it to remove some of the old objects. I'll tweak how many get removed once i get it working at all:

    function warframe() {

    var obj, i;
    for ( i = scene.children.length - 1; i >= 0 ; i -- ) {
        obj = scene.children[ i ];
        if ( obj !== camera) {
            scene.remove(obj);
        }
    }

    var j = 0;
    for (var i = 0; i < 3; i++) {
        var element = document.createElement('iframe');
        //element.src = 't.html';
        element.src = 'http://www.youtube.com/embed/' + warframes[i];
        element.style.cssText = " -webkit-transform: translateZ(0);   -moz-transform: translateZ(0);            -ms-transform: translateZ(0);                -o-transform: translateZ(0);              transform: translateZ(0);            -webkit-backface-visibility: hidden;          -moz-backface-visibility: hidden;         -ms-backface-visibility: hidden;        backface-visibility: hidden;         -webkit-perspective: 1000;          -moz-perspective: 1000;         -ms-perspective: 1000;           perspective: 1000;             ";
        element.width = 320;
        element.height = 200
        var object = new THREE.CSS3DObject(element);
        object.position.x = Math.random() * 4000 - 2000;
        object.position.y = Math.random() * 4000 - 2000;
        object.position.z = Math.random() * 4000 - 2000;
        scene.add(object);
        objects.push(object);
        var object = new THREE.Object3D();
        object.position.x = ( i * 340 ) - 240;
        object.position.y = ( j * 240 ) - 150;
        object.position.z = -100;
        //targets.grid.pop();
        grid.push(object);
        transform(grid, 2000);
    }
}
Sirus
  • 1
  • 1
  • What version of three.js are you using? Make sure you're using 59 or higher. – mrdoob Aug 10 '13 at 08:57
  • Hello mrdoob. great library! Yes I'm using the newest you can see my test page here http://www.mdsdriveshaft.com/test/newstart.html if you click on the torchlight2 picture 8 videos should load, then if you click on the warframe picture it runs that code that is supposed to remove the objects from the scene before it adds new ones, but it doesnt – Sirus Aug 10 '13 at 18:16
  • actually use this link to turn off mod pagespeed http://www.mdsdriveshaft.com/test/newstart.html?ModPagespeed=off – Sirus Aug 10 '13 at 18:25
  • You need to also update `CSS3DRenderer.js` to the latest. – mrdoob Aug 15 '13 at 19:43
  • @mrdoob. THX many times and again for grat library! Actually (R73) removing object will not free up blocked memory. Often reloading will cause a HEAP mem leaks see my question http://stackoverflow.com/questions/37762961/three-js-proper-removing-object-from-scene-still-reserved-in-heap – Martin Jun 11 '16 at 18:49

0 Answers0