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

问题描述 投票:0回答:2

我正在使用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');
    });

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

非常感谢提前!

three.js clone deep-copy
2个回答
0
投票

如果你实际上变换几何(例如通过BufferGeometry.translate()),你必须创建一个mGeom的副本。如果改变THREE.Points对象(实际的点云),几何数据将不会改变。使用相同的几何对象创建THREE.Points的新实例应该已经有效了。

如果情况并非如此,请考虑使用live example演示您的问题。


0
投票

非常感谢!

更新:

所以我发现了我的问题。我混合了网格和几何操作。使用网格克隆“masterRawGeo”,我存储了初始网格并刷新了总是返回初始设置。但遗憾的是,我还对与克隆共享的几何体“mGeom”进行了缩放(-1,1,1)操作。因此,几何变化也影响了克隆。真的需要一段时间来进入这个。关于性能,我最好只使用一个几何体并对网格进行所有操作,对吧?

© www.soinside.com 2019 - 2024. All rights reserved.