对3d对象进行深度复制克隆的最佳实践?

时间:2019-04-08 06:23:29

标签: three.js clone deep-copy

我正在three.js中开发对象编辑器。现在,我正在努力解决一个问题。 我加载一个点云,对其进行克隆,并将其存储为初始默认对象,然后对加载的点云执行矩阵旋转。

let loaderMaster = new THREE.PLYLoader();
loaderMaster.load('./ply_data/rawMaster.ply', function(mGeom) {

        var scanMaterialM = new THREE.PointsMaterial({
            size: 15,
            color: 0xff0000
        });
        mGeom.computeVertexNormals();

        masterCloud = new THREE.Points(mGeom, scanMaterialM);


        masterCloud.rotation.x = -90 * Math.PI / 180;
        masterCloud.geometry.scale(-1, -1, 1);
        masterCloud.name = "masterMesh";

        masterRawGeo = masterCloud.clone();

        scene.add(masterCloud)

        transformControlmaster.attach(masterCloud)
        scene.add(transformControlmaster);
        transform('master');
    });

在此第一步中,一切正常。 当必须第二次执行某项操作时。 我从场景中删除了当前点云,并将其替换为初始的默认克隆,然后对其进行新的矩阵处理。但是结果是完全垃圾。 似乎甚至我都删除了对象并以某种方式清理了场景,以某种方式存储了第一个操作。 最好的做法是用深复制克隆替换几何,而不受先前操作的完全影响?

非常感谢!

2 个答案:

答案 0 :(得分:0)

如果您实际上是在变换几何形状(例如通过BufferGeometry.translate()),则必须创建mGeom的副本。如果改用THREE.Points对象(实际点云),则几何数据不会改变。使用相同的几何对象创建THREE.Points的新实例应该已经可以工作。

如果不是这种情况,请考虑使用live example来演示您的问题。

答案 1 :(得分:0)

非常感谢!

更新:

所以我发现了我的问题。我混合了网格和几何处理。通过网格物体克隆“ masterRawGeo”,我存储了初始网格物体,并始终刷新到初始设置。但是不幸的是,我还对与克隆共享的几何“ mGeom”执行了scale(-1,1,1)操作。因此,几何形状的变化也影响了克隆。确实需要一段时间才能进入。关于性能,我最好只使用一种几何图形,然后对网格进行所有操作,对吗?