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

时间:2015-04-08 18:39:05

标签: three.js

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

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

如果我执行以下操作:

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

// make conversion 

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

网状物会发生什么?他的几何图形仍然保留在视频卡上的相同位置以及RAM中的所有其他数据中?

1 个答案:

答案 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

另外,如果您对如何完成这些功能感兴趣,请查看这些功能的源代码。

希望能回答你的问题

编辑答案因为我弄得很困惑