Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| js:wrap_lazy-fbx [2026/07/21 17:10] – créée avillepreux | js:wrap_lazy-fbx [2026/07/21 17:27] (Version actuelle) – avillepreux | ||
|---|---|---|---|
| Ligne 85: | Ligne 85: | ||
| function loadViewer(viewers, | function loadViewer(viewers, | ||
| | | ||
| - | var input_path = container.textContent; | + | var input_path = container.getAttribute(" |
| var src_path | var src_path | ||
| var basename | var basename | ||
| Ligne 116: | Ligne 116: | ||
| container.innerHTML = ""; | container.innerHTML = ""; | ||
| container.appendChild(viewer.renderer.domElement); | container.appendChild(viewer.renderer.domElement); | ||
| - | |||
| - | console.log(viewer.renderer.domElement); | ||
| Ligne 149: | Ligne 147: | ||
| viewer.fbxObject = null; | viewer.fbxObject = null; | ||
| viewer.mixer | viewer.mixer | ||
| - | |||
| - | console.log(" | ||
| viewer.loader.load( | viewer.loader.load( | ||
| Ligne 173: | Ligne 169: | ||
| const box = new THREE.Box3().setFromObject(object); | const box = new THREE.Box3().setFromObject(object); | ||
| const size = box.getSize(new THREE.Vector3()); | const size = box.getSize(new THREE.Vector3()); | ||
| - | |||
| - | console.log(" | ||
| if (size.length() > 0) { | if (size.length() > 0) { | ||
| Ligne 197: | Ligne 191: | ||
| } else { | } else { | ||
| - | console.warn(" | + | console.warn(" |
| // Keep the original camera | // Keep the original camera | ||
| Ligne 207: | Ligne 201: | ||
| (xhr) => { | (xhr) => { | ||
| - | console.log( | + | |
| " | " | ||
| (xhr.loaded / xhr.total * 100).toFixed(1) + " | (xhr.loaded / xhr.total * 100).toFixed(1) + " | ||
| - | ); | + | );*/ |
| }, | }, | ||
| (error) => { | (error) => { | ||
| - | console.error(" | + | console.error(" |
| } | } | ||
| ); | ); | ||
| - | + | viewer.animationFrame = null; | |
| - | function animate() { | + | |
| - | requestAnimationFrame(animate); | + | |
| viewer.controls.update(); | viewer.controls.update(); | ||
| viewer.renderer.render(viewer.scene, | viewer.renderer.render(viewer.scene, | ||
| - | console.log(" | + | |
| - | | + | |
| - | animate(); | + | |
| window.addEventListener(' | window.addEventListener(' | ||
| Ligne 236: | Ligne 229: | ||
| } | } | ||
| + | | ||
| + | | ||
| + | function disposeObject(object) { | ||
| + | |||
| + | object.traverse((child) => { | ||
| + | |||
| + | if (child.isMesh) { | ||
| + | |||
| + | // Geometry | ||
| + | if (child.geometry) { | ||
| + | child.geometry.dispose(); | ||
| + | } | ||
| + | |||
| + | // Material(s) | ||
| + | if (child.material) { | ||
| + | |||
| + | if (Array.isArray(child.material)) { | ||
| + | child.material.forEach(material => { | ||
| + | disposeMaterial(material); | ||
| + | }); | ||
| + | } else { | ||
| + | disposeMaterial(child.material); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | function disposeMaterial(material) { | ||
| + | |||
| + | // Textures | ||
| + | Object.keys(material).forEach((key) => { | ||
| + | |||
| + | const value = material[key]; | ||
| + | |||
| + | if (value && value.isTexture) { | ||
| + | value.dispose(); | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | material.dispose(); | ||
| + | } | ||
| + | | ||
| + | | ||
| | | ||
| function destroyViewer(viewers, | function destroyViewer(viewers, | ||
| var viewer = viewers.get(container); | var viewer = viewers.get(container); | ||
| + | |||
| // Stop controls events | // Stop controls events | ||
| Ligne 247: | Ligne 286: | ||
| // Stop animations | // Stop animations | ||
| - | | + | |
| + | cancelAnimationFrame(viewer.animationFrame); | ||
| + | viewer.animate = null; | ||
| + | |||
| + | | ||
| viewer.mixer.stopAllAction(); | viewer.mixer.stopAllAction(); | ||
| - | viewer.mixer.uncacheRoot(fbxObject); | + | viewer.mixer.uncacheRoot(viewer.fbxObject); |
| } | } | ||
| // Dispose FBX resources | // Dispose FBX resources | ||
| - | if (fbxObject) { | + | if (viewer.fbxObject) { |
| - | disposeObject(fbxObject); | + | disposeObject(viewer.fbxObject); |
| - | viewer.scene.remove(fbxObject); | + | viewer.scene.remove(viewer.fbxObject); |
| - | fbxObject = null; | + | |
| } | } | ||
| Ligne 290: | Ligne 333: | ||
| document.addEventListener(" | document.addEventListener(" | ||
| + | | ||
| + | | ||
| + | document.querySelectorAll(" | ||
| + | | ||
| + | wrap_scene.setAttribute(" | ||
| + | wrap_scene.innerHTML = ""; | ||
| + | | ||
| + | }); | ||
| + | | ||
| const viewers = new WeakMap(); | const viewers = new WeakMap(); | ||