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