目标是使用相对于某个参考点的网格组进行变换。
我找到的解决方案的一部分是在Object3D中放置必要的网格物体,在Object3D上进行转换,然后在转换后的Object3D中查看场景中的网格物体。 也许,在将网格添加回场景后获取worldMatrix的位置和旋转?
如果我执行以下操作:
scene.remove(mesh);
obj3d.add(mesh);
// make conversion
obj3d.remove(mesh);
scene.add(mesh);
网状物会发生什么?他的几何图形仍然保留在视频卡上的相同位置以及RAM中的所有其他数据中?
答案 0 :(得分:0)
在场景中附加和分离对象需要的不仅仅是这些。在将对象从一个参考点移到另一个参考点之前,必须将父矩阵世界应用于该对象(如果您希望它与之前处于相同的wolrd位置)。在将对象添加到另一个参考点之前,必须首先应用新的父逆矩阵世界(如果您希望它与之前处于相同的世界位置)
如果这听起来很复杂,请不要担心。
幸运的是,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
另外,如果您对如何完成这些功能感兴趣,请查看这些功能的源代码。
希望能回答你的问题
编辑答案因为我弄得很困惑