3d 对象的深度复制克隆的最佳实践?
Best practice for deep copy clone of an 3d object?
我正在 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');
});
第一步一切正常。
当必须执行第二次操作时。
我从场景中移除当前点云并将其替换为初始默认克隆,然后对其执行新的矩阵操作。但结果完全是垃圾。
似乎即使我删除了对象并以某种方式清理了场景,也以某种方式存储了第一次操作。
用深度复制克隆更改替换几何的最佳做法是什么,完全不受以前操作的影响?
提前致谢!!!
如果您实际变换几何体(例如通过 BufferGeometry.translate()),则必须创建 mGeom
的副本。如果您改为变换 THREE.Points
对象(实际点云),则几何数据不会改变。使用相同的几何对象创建 THREE.Points
的新实例应该已经可以工作了。
如果不是这种情况,请考虑用 live example 来证明您的问题。
非常感谢!
更新:
所以我发现了我的问题。我混合了网格和几何操作。使用网格克隆 "masterRawGeo" 我存储了初始网格并始终刷新回初始设置。但不幸的是,我还对与克隆共享的几何体 "mGeom" 进行了 scale(-1, 1, 1) 操作。因此,几何形状的变化也影响了克隆。真的需要一段时间才能进入这个。关于性能,我最好只使用一个几何体并在网格上进行所有操作,对吗?
我正在 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');
});
第一步一切正常。 当必须执行第二次操作时。 我从场景中移除当前点云并将其替换为初始默认克隆,然后对其执行新的矩阵操作。但结果完全是垃圾。 似乎即使我删除了对象并以某种方式清理了场景,也以某种方式存储了第一次操作。 用深度复制克隆更改替换几何的最佳做法是什么,完全不受以前操作的影响?
提前致谢!!!
如果您实际变换几何体(例如通过 BufferGeometry.translate()),则必须创建 mGeom
的副本。如果您改为变换 THREE.Points
对象(实际点云),则几何数据不会改变。使用相同的几何对象创建 THREE.Points
的新实例应该已经可以工作了。
如果不是这种情况,请考虑用 live example 来证明您的问题。
非常感谢!
更新:
所以我发现了我的问题。我混合了网格和几何操作。使用网格克隆 "masterRawGeo" 我存储了初始网格并始终刷新回初始设置。但不幸的是,我还对与克隆共享的几何体 "mGeom" 进行了 scale(-1, 1, 1) 操作。因此,几何形状的变化也影响了克隆。真的需要一段时间才能进入这个。关于性能,我最好只使用一个几何体并在网格上进行所有操作,对吗?