Babylon.js - Configurateur 3D Mur, Sol et Objets › Prends mon fichier index.html Babylon.js existant et modifie-le pour ajouter un système de sélection et de chargement de scènes complètes depuis le dossier ./models, sans les intégrer à la scène déjà affichée. Objectif général : - je veux pouvoir choisir une nouvelle scène 3D depuis le dossier ./models - quand je sélectionne une scène, elle doit remplacer complètement la scène actuelle - je ne veux pas ajouter cette scène comme un objet dans la scène existante - je veux quil ny ait quune seule scène active à la fois Contexte du projet : - jai déjà un index.html avec Babylon.js - il contient une scène actuelle avec floor, walls, textures, panneaux latéraux, etc. - je veux conserver lapplication et son interface générale - mais je veux ajouter une nouvelle section "Scènes" - les fichiers de scènes sont dans le dossier ./models - exemple : - models/showroom.glb - models/kitchen.glb - models/bathroom.glb Comportement attendu : - ajouter une section "Scènes" dans le panneau latéral - afficher une liste ou une grille propre des scènes disponibles - utiliser pour cette première version un tableau JavaScript du type : const sceneItems = [ { name: "Showroom", file: "models/showroom.glb" }, { name: "Kitchen", file: "models/kitchen.glb" }, { name: "Bathroom", file: "models/bathroom.glb" } ]; - quand lutilisateur clique sur une scène dans le panneau : - la scène actuelle doit être nettoyée - les meshes, transform nodes, materials et textures de la scène précédente doivent être supprimés proprement si nécessaire - la nouvelle scène .glb doit être chargée ensuite - il ne doit pas y avoir de superposition entre lancienne et la nouvelle scène - une seule scène doit être visible à la fois Choix technique recommandé : - garder le même engine Babylon.js - garder une seule variable scene globale - recréer une nouvelle scène Babylon propre quand on change de scène - après chargement, réinitialiser les éléments nécessaires : - caméra - lumières - environnement si nécessaire - gizmos ou sélections si présents - prévoir une fonction centrale du type loadCompleteScene(sceneItem) Important : - la nouvelle scène choisie doit remplacer complètement la précédente - ne pas traiter les fichiers de scène comme des objets à ajouter - ne pas utiliser le système addModel() pour ça - il faut une logique séparée pour les scènes complètes Interface demandée : - garder le panneau latéral existant - ajouter une vraie section "Scènes" - afficher les scènes sous forme de cartes simples et propres - chaque carte doit contenir au moins : - le nom de la scène - un bouton ou une zone cliquable "Charger" - mettre en évidence la scène active si possible - garder le design moderne, scrollable et lisible Contraintes techniques : - utiliser uniquement HTML, CSS et JavaScript dans un seul fichier HTML - ne pas utiliser de framework - conserver Babylon.js en CDN - ne pas casser le reste de lapplication - le code doit rester lisible, structuré et bien commenté pour un débutant Fonctionnalités à coder : 1. Tableau de scènes : - créer const sceneItems = [...] - permettre dajouter facilement de nouvelles scènes plus tard 2. Rendu du panneau : - créer une fonction renderScenePanel() - générer automatiquement la liste des scènes dans le panneau à partir de sceneItems 3. Chargement dune scène complète : - créer une fonction loadCompleteScene(sceneItem) - cette fonction doit : - nettoyer correctement la scène actuelle - créer une nouvelle scène Babylon.js propre - recréer une caméra fonctionnelle - recréer les lumières nécessaires - rebrancher le render loop si besoin - charger ensuite le fichier .glb sélectionné - si possible, repositionner automatiquement la caméra pour bien voir la scène chargée 4. Réinitialisation des états : - réinitialiser les sélections courantes - vider selectedObject, selectedTarget, active texture selection, gizmos, etc. si ces systèmes existent déjà - éviter les erreurs liées à danciens meshes supprimés 5. Robustesse : - ajouter une gestion derreur si une scène ne charge pas - afficher un message simple dans la console ou dans linterface si le fichier est introuvable ou invalide 6. Extensibilité : - commenter à la fin du fichier comment ajouter une nouvelle scène dans sceneItems - structurer le code pour quon puisse plus tard remplacer sceneItems par un fichier JSON ou une API Qualité attendue : - code final propre, exécutable, complet - bien intégré dans mon application actuelle - pas de pseudo-code - ne pas réécrire toute lapplication inutilement - modifier intelligemment le fichier existant - retourner uniquement le code HTML final complet Rappel important : - une scène choisie doit remplacer totalement la précédente - ne pas intégrer la nouvelle scène avec lexistante - ne pas la charger comme un simple objet • Babylon.js - Configurateur 3D et Scènes