export const destroyThree = () => {
disposeSceneObjects(scene);
scene.clear();
renderer.dispose();
renderer.forceContextLoss();
let gl = renderer.domElement.getContext("webgl");
if(gl && gl.getExtension('WEBGL_lose_context')){
gl.getExtension('WEBGL_lose_context')!.loseContext();
}
scene = null;
camera = null;
renderer = null;
cancelAnimationFrame(animationId); //清除requestAnimationFrame
animationId = null;
};
function disposeObject(obj) {
if (obj instanceof THREE.Mesh) {
if (obj.geometry) obj.geometry.dispose();
if (obj.material) {
if (obj.material instanceof THREE.Material) {
obj.material.dispose();
} else if (Array.isArray(obj.material)) { // 处理多材质的情况
obj.material.forEach(m => m.dispose());
}
}
}
}
function disposeSceneObjects(scene) {
scene.traverse(disposeObject);
}
清除监听、定时器啥的,自己往里面加