【问题标题】:Moving mesh from the scene in Object3D and back在 Object3D 中从场景中移动网格并返回
【发布时间】:2015-04-09 14:59:24
【问题描述】:

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

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

如果我执行以下操作:

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

// make conversion 

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

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

【问题讨论】:

标签: three.js


【解决方案1】:

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

另外,如果您对这些函数的完成方式感兴趣,请查看这些函数的源代码。

希望能回答你的问题

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

【讨论】:

  • 谢谢,我想这就是我需要的))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多