|  |  | 
 |  |  |         // this.renderer.shadowMap.type = THREE.BasicShadowMap;    // 最低阴影 | 
 |  |  |         // renderer.toneMapping = THREE.ReinhardToneMapping; | 
 |  |  |         renderer.toneMapping = THREE.ACESFilmicToneMapping; | 
 |  |  |         renderer.setPixelRatio(window.devicePixelRatio); | 
 |  |  |         renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)); | 
 |  |  |         renderer.setSize(this.getFullWidth(), this.getFullHeight()); | 
 |  |  |         this.dom?.appendChild(renderer.domElement); | 
 |  |  |         return renderer; | 
 |  |  | 
 |  |  |     destroy = () => { | 
 |  |  |         cancelAnimationFrame(this.animationFrame); | 
 |  |  |         window.removeEventListener('resize', this.resizeHandler); | 
 |  |  |         this.dom?.removeEventListener("click", this.handleClickEvent); | 
 |  |  |         if (this.scene) { | 
 |  |  |             while (this.scene.children.length > 0) { | 
 |  |  |                 this.removeEntity(this.scene.children[0]); | 
 |  |  | 
 |  |  |         if (this.renderer) { | 
 |  |  |             this.renderer.dispose(); | 
 |  |  |             this.renderer.forceContextLoss(); | 
 |  |  |             this.renderer.context = null; | 
 |  |  |             this.renderer.domElement = null; | 
 |  |  |             if (this.dom && this.renderer.domElement && this.dom.contains(this.renderer.domElement)) { | 
 |  |  |                 try { | 
 |  |  |                     this.dom.removeChild(this.renderer.domElement); | 
 |  |  |                 } catch (error) { | 
 |  |  |                     console.warn('Failed to remove renderer.domElement:', error); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             this.renderer = null; | 
 |  |  |         } | 
 |  |  |         if (this.composer) { | 
 |  |  | 
 |  |  |             this.controls.dispose(); | 
 |  |  |             this.controls = null; | 
 |  |  |         } | 
 |  |  |         this.dom?.removeEventListener("click", this.handleClickEvent); | 
 |  |  |         if (this.stats && this.stats.domElement && this.dom.contains(this.stats.domElement)) { | 
 |  |  |             try { | 
 |  |  |                 this.dom.removeChild(this.stats.domElement); | 
 |  |  |             } catch (error) { | 
 |  |  |                 console.warn('Failed to remove stats.domElement:', error); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         this.camera = null; | 
 |  |  |         this.objects = []; | 
 |  |  |         while (this.dom?.firstChild) { | 
 |  |  |             this.dom.removeChild(this.dom.firstChild); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     removeEntity = (object) => { |