相关疑难解决方法(0)

ThreeJS:从场景中删除对象

我正在使用ThreeJS开发一个显示实体列表的Web应用程序,每个实体都有相应的"查看"和"隐藏"按钮; 例如,entityName 查看隐藏.当用户单击" 查看"按钮时,将调用以下函数并成功在屏幕上绘制实体.

function loadOBJFile(objFile){            
    /* material of OBJ model */                                          
    var OBJMaterial = new THREE.MeshPhongMaterial({color: 0x8888ff});
    var loader = new THREE.OBJLoader();
    loader.load(objFile, function (object){
        object.traverse (function (child){
            if (child instanceof THREE.Mesh) {
                child.material = OBJMaterial;
            }
        });
        object.position.y = 0.1;
        scene.add(object);
    });     
}

function addEntity(object) {
    loadOBJFile(object.name);
}
Run Code Online (Sandbox Code Playgroud)

在单击" 隐藏"按钮时,将调用以下函数:

function removeEntity(object){
    scene.remove(object.name);
}
Run Code Online (Sandbox Code Playgroud)

问题是,单击" 隐藏"按钮后,一旦加载,实体就不会从屏幕中删除.如何使" 隐藏"按钮起作用?

我做了小实验.我在函数内部scene.remove(object.name);之后添加,结果,当点击"查看"按钮时,没有实体绘制(如预期的那样)意味着内部工作正常.但我仍然无法弄清楚如何在removeEntity(object)中使用它.scene.add(object);addEntityscene.remove(object.name);addEntity

另外,我检查了scene.children的内容,它显示:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

完整代码: …

javascript three.js

45
推荐指数
3
解决办法
9万
查看次数

三个js正确从场景中删除对象(仍然在HEAP中保留)

删除网格表单场景的正确方法是什么?在这个例子中:

    removable_items = [];
    box = new THREE.Object3D();
    scene.add(box);

    function add() {
        var mesh = new THREE.Mesh( new THREE.IcosahedronGeometry( 10, 5 ), new THREE.MeshPhongMaterial( {color: 0xFFFFFF}) );   
        box.add( mesh );
        removable_items.push(mesh);
        //clean(); ///// when is integrated in function memory is cleaned properly
    }   

    function clean() {
          if( removable_items.length > 0 ) {
            removable_items.forEach(function(v,i) {
               v.parent.remove(v);
            });
            removable_items = null;
            removable_items = [];
          }
    }

    function makeExperiment(r) {
      var i = 0;
      while (i < r) {
        add();
        i++;
        if( r …
Run Code Online (Sandbox Code Playgroud)

javascript three.js

15
推荐指数
1
解决办法
8508
查看次数

Three.js Collada - 处理()和释放内存(垃圾收集)的正确方法是什么?

我已经通过ColladaLoader成功导入了.dae场景.

问题是,我需要在几个.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);
Run Code Online (Sandbox Code Playgroud)

我可能做错了什么?

非常感谢提前!


编辑:

这是整个代码.

    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 …
Run Code Online (Sandbox Code Playgroud)

blender collada three.js

8
推荐指数
2
解决办法
6260
查看次数

标签 统计

three.js ×3

javascript ×2

blender ×1

collada ×1