js:wrap_lazy-fbx

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
js:wrap_lazy-fbx [2026/07/21 17:10] – créée avillepreuxjs:wrap_lazy-fbx [2026/07/21 17:27] (Version actuelle) avillepreux
Ligne 85: Ligne 85:
 function loadViewer(viewers, container) { function loadViewer(viewers, container) {
      
-  var input_path = container.textContent;+  var input_path = container.getAttribute("src");
   var src_path   = ("/_media/" + input_path).replaceAll(":", "/");   var src_path   = ("/_media/" + input_path).replaceAll(":", "/");
   var basename   = src_path.split('/').reverse()[0];   var basename   = src_path.split('/').reverse()[0];
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     = null;   viewer.mixer     = null;
- 
-  console.log("Loading FBX:", src_path); 
  
   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("FBX bounds:", size); 
  
       if (size.length() > 0) {       if (size.length() > 0) {
Ligne 197: Ligne 191:
       } else {       } else {
  
-          console.warn("FBX contains no visible geometry");+          console.warn("FBX contains no visible geometry", container.getAttribute("src"));
  
           // Keep the original camera           // Keep the original camera
Ligne 207: Ligne 201:
  
       (xhr) => {       (xhr) => {
-          console.log(+          /*console.log(
               "Loading:",               "Loading:",
               (xhr.loaded / xhr.total * 100).toFixed(1) + "%"               (xhr.loaded / xhr.total * 100).toFixed(1) + "%"
-          );+          );*/
       },       },
       (error) => {       (error) => {
-          console.error("FBX error:", error);+          console.error("FBX error:", error, container.getAttribute("src"));
       }       }
   );   );
  
- +  viewer.animationFrame = null; 
-  function animate() { +  viewer.animate = function animate() { 
-      requestAnimationFrame(animate);+      viewer.animationFrame = requestAnimationFrame(viewer.animate);
       viewer.controls.update();       viewer.controls.update();
       viewer.renderer.render(viewer.scene, viewer.camera);       viewer.renderer.render(viewer.scene, viewer.camera);
-      console.log("rendering"); +  };
-  }+
  
-  animate();+  viewer.animate();
  
   window.addEventListener('resize', () => {   window.addEventListener('resize', () => {
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, container) { function destroyViewer(viewers, container) {
  
     var viewer = viewers.get(container);     var viewer = viewers.get(container);
 +   
  
     // Stop controls events     // Stop controls events
Ligne 247: Ligne 286:
  
     // Stop animations     // Stop animations
-    if (viewer.mixer && fbxObject) {+   
 +  cancelAnimationFrame(viewer.animationFrame); 
 +  viewer.animate = null; 
 +   
 +    if (viewer.mixer && viewer.fbxObject) {
         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;+        viewer.fbxObject = null;
     }     }
  
Ligne 290: Ligne 333:
  
 document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
 +  
 +  
 +  document.querySelectorAll(".wrap_fbx-scenes .wrap_fbx-scene").forEach(function(wrap_scene) {
 +  
 +    wrap_scene.setAttribute("src", wrap_scene.textContent);
 +    wrap_scene.innerHTML = "";
 +    
 +  });
 +  
  
   const viewers = new WeakMap();   const viewers = new WeakMap();
  • js/wrap_lazy-fbx.1784646616.txt.gz
  • Dernière modification : 2026/07/21 17:10
  • de avillepreux