从 Object3D 中的场景移动网格并返回

Moving mesh from the scene in Object3D and back

目的是使一组网格相对于某个参考点进行变换。

我找到的部分解决方案是将必要的网格放在 Object3D 中,在 Object3D 上进行转换,然后在场景中获取我的网格,就像它们在转换后的 Object3D 中看起来一样。 也许,在将网格添加回场景后获得 worldMatrix 的位置和旋转?

如果我执行以下操作:

scene.remove(mesh);
obj3d.add(mesh);

// make conversion 

obj3d.remove(mesh);
scene.add(mesh);

网格会怎样?他的几何图形仍然保留在视频卡上的相同位置和 RAM 中的所有其他数据?

在场景中附加和分离对象需要的远不止于此。在将对象从一个参考点移到另一个参考点之前,您必须将父矩阵世界应用到该对象(如果您希望它与之前处于相同的世界位置)。在将对象添加到另一个参考点之前,您必须首先应用新的父级 inverse 矩阵世界(如果您希望它与以前处于相同的世界位置)

如果这听起来很复杂,请不要担心。

幸运的是,THREEjs 库中有这方面的辅助函数。

这里引用了函数 http://threejs.org/docs/#Reference/Extras/SceneUtils

并且可以通过调用

来使用
THREE.sceneutils.attach (child, scene, parent);

THREE.sceneutils.detach (child, parent, scene);

注意参数的顺序。

THREE.sceneutils.attach (mesh, scene, obj3d); //adds mesh as child to obj3d
                                              //while mentaining its position

// make conversion

THREE.sceneutils.detach (mesh, obj3d, scene); //adds mesh as child to scene
                                              //while maintaining its position

此外,如果您对这些函数的实现方式感兴趣,请查看这些函数的源代码。

希望能回答您的问题

编辑了答案,因为我自己也弄糊涂了