如何销毁整个三维对象,包括其动画和所有内容?
我有一个glb文件(使用Blender创建并导出为gltf 2.0格式)
然后我将它与React一起使用(以及React Three Fiber)。
我也开始了一个动画,代码是:
我使用了React Three Fiber文档中的https://docs.pmnd.rs/react-three-fiber/tutorials/loading-models,并使用https://gltf.pmnd.rs/解构了整个glb文件。
(我也可以使用...)
但是我以后需要通过代码更改一些网格。
我要怎样摧毁它们?
我找到了很多相关的参考资料,几乎所有的都使用类似于...的东西。
问题是在我的代码中,我有几个对象,不仅仅是场景,我不确定在我的情况下它是否能正常工作。
我想能够销毁和处理所有这些对象,以便在需要时重新创建它们。
我需要这样做的原因是,当使用React Router切换到其他页面并返回到该页面时,它会重新创建所有内容,并且以前的对象仍然留在内存中。
我尝试将它们序列化以存储它们,但序列化使整个过程变得太慢了。
如何销毁所有东西?
Rafael
我有一个glb文件(使用Blender创建并导出为gltf 2.0格式)
然后我将它与React一起使用(以及React Three Fiber)。
const { scene, nodes, materials, animations } = useGLTF('/studio.glb');
我也开始了一个动画,代码是:
const Office = (props) => {
const { scene, nodes, materials, animations } = useGLTF('/studio.glb');
let mixer = new THREE.AnimationMixer(scene); // <-- other object
animations.forEach((clip) => {
const action = mixer.clipAction(clip);
action.play();
});
useFrame((state, delta) => {
mixer.update(delta);
});
const group = useRef();
useThree(({ camera }) => {
camera.position.set(xPos, yPos, 7);
camera.rotation.set(0.1, -0.75, 0.08);
camera.fov = 35;
camera.updateProjectionMatrix();
});
return (
<group ref={group} dispose={null}>
<group rotation={[ Math.PI / 2, 0, 0 ]} scale={[ 0.01, 0.01, 0.01 ]}>
<group name="Character">
<primitive object={nodes.pasted__Hips} />
<skinnedMesh
geometry={nodes.pasted__MocapGuy_Caruncula.geometry}
...
...
...
}
我使用了React Three Fiber文档中的https://docs.pmnd.rs/react-three-fiber/tutorials/loading-models,并使用https://gltf.pmnd.rs/解构了整个glb文件。
(我也可以使用...)
return <primitive object={scene} />
但是我以后需要通过代码更改一些网格。
我要怎样摧毁它们?
我找到了很多相关的参考资料,几乎所有的都使用类似于...的东西。
scene.remove( selectedObject );
问题是在我的代码中,我有几个对象,不仅仅是场景,我不确定在我的情况下它是否能正常工作。
我想能够销毁和处理所有这些对象,以便在需要时重新创建它们。
我需要这样做的原因是,当使用React Router切换到其他页面并返回到该页面时,它会重新创建所有内容,并且以前的对象仍然留在内存中。
我尝试将它们序列化以存储它们,但序列化使整个过程变得太慢了。
如何销毁所有东西?
Rafael