Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 在Object3D中从场景中移动网格并返回_Three.js - Fatal编程技术网

Three.js 在Object3D中从场景中移动网格并返回

Three.js 在Object3D中从场景中移动网格并返回,three.js,Three.js,目的是利用网格组相对于某个参考点进行变换 我找到的部分解决方案是在Object3D中放置必要的网格,在Object3D上进行转换,然后在场景中获取在转换后的Object3D中显示的网格。 也许,在将网格添加回场景以获得worldMatrix的位置和旋转之后 如果我做了以下事情: scene.remove(mesh); obj3d.add(mesh); // make conversion obj3d.remove(mesh); scene.add(mesh); 网格会发生什么情况?他的几

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

我找到的部分解决方案是在Object3D中放置必要的网格,在Object3D上进行转换,然后在场景中获取在转换后的Object3D中显示的网格。 也许,在将网格添加回场景以获得worldMatrix的位置和旋转之后

如果我做了以下事情:

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

// make conversion 

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

网格会发生什么情况?他的几何体仍然保留在显卡上的同一位置以及RAM中的所有其他数据?

将对象从场景中连接和分离到场景需要的不仅仅是这些。在将对象从一个参照点移到另一个参照点之前,必须将父矩阵世界应用于对象(如果希望它与以前处于相同的wolrd位置)。在将对象添加到另一个参照点之前,必须首先应用新的父对象逆矩阵世界(如果希望它与以前处于相同的世界位置)

如果这听起来很复杂,别担心

幸运的是,THREEjs库中有用于此的帮助函数

此处引用了该函数

并且可以通过调用

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

注意论点的顺序

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
此外,如果您对这些函数的实现方式感兴趣,请检查它们的源代码

希望这能回答你的问题


编辑答案是因为我把自己搞糊涂了

好问题,特别是有很多网格或精灵,比如拍摄或重复动画,比如雨滴。这可能会有帮助,谢谢你,但它不能回答问题谢谢,我想这是我需要的。)
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