IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Webgl][Three.js] Charger des fichiers .obj


Sujet :

JavaScript

  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut [Webgl][Three.js] Charger des fichiers .obj
    Bonjour,
    J'essaye actuellement d'intégrer des modèles 3d, sans flash, dans un site web. J'ai opté pour l'utilisation de webgl, ainsi que de la librairie three.js. Mais voilà, je rencontre un gros problème : les modèles que j'essaye de charger via three.js (ce sont des fichiers .obj associés à un fichier .mtl) n'apparaissent pas, même une fois convertis en json via le convertisseur associé à three.js. Je pense que c'est à cause d'un script qui se bloque dans le fichier de chargement. J'ai essayé de le résoudre, mais je ne vois vraiment pas ce qui cloche ...

    Premier blocage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( /^usemtl /.test( line ) ) {
       // material
       meshN( undefined, line.substring( 7 ).trim() );
    }
    Deuxième blocage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( ( result = normal_pattern.exec( line ) ) !== null ) {
       // ["vn 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
       normals.push( vector(
          parseFloat( result[ 1 ] ),
          parseFloat( result[ 2 ] ),
          parseFloat( result[ 3 ] )
       ) );
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    C'est à dire, un script qui se bloque ? Tu n'as rien en console Javascript ? Pas d'exception renvoyée au chargement du .obj ?

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    Je n'utilise pas la console javascript (je ne sais pas où la trouver d’ailleurs). J'utilise notepad.
    Concernant les messages d'erreurs, je les reçois quand j'essaye de charger le modèle 3d dans mon navigateur (firefox). Je reçois un message comme quoi un script est trop long a l'exécution, j'ai le choix de l’arrêter ou de le laisser. Il me renvoi aussi les lignes où il y a eu un blocage.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Citation Envoyé par piero5673 Voir le message
    Je n'utilise pas la console javascript (je ne sais pas où la trouver d’ailleurs). J'utilise notepad.
    C'est un comble de vouloir faire de la 3D en Javascript avant de savoir se servir de la console Ce serait comme vouloir faire une triple rondade arrière avant de savoir marcher. Tu ne t'en sortiras pas sans un minimum de connaissances en matière de debugging Javascript. Je te suggère un peu de lecture avant d'aller plus loin dans ton projet : https://developers.google.com/chrome-developer-tools/

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    Merçi, j'ai trouvé où ça bloque. Le script ne prend pas en compte les puissances de 10. Aurais-tu une idée du moyen de régler ce petit problème ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Il me faudrait un peu plus d'infos

  7. #7
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    J'ai finalement résolu le problème avec un petit script python (three.js refusais de lire les lignes du genre "8.86E-03" à cause du "E" qui symbolise la puissance de 10). Mais une résolution amène ... un autre problème je ne sais pas si ça concerne toujours cette partie du forum par contre (la console javascript ne renvoi aucune erreur). Petit screen pour éviter les explication asser longues :


    L'assemblage est correcte et ne comporte pas d'erreurs (il s'ouvre sans problème (et sans "trous") avec différents logiciels 3D (solidworks, 3d object converter, ...) et je cale complétement sur les raisons de l'apparition des "trous". Ils se situent toujours au même endroit. Ils apparaissent sur des pièces qui sont considérées comme des blocs, et où la texture est étalée partout.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Salut !

    Essaye de désactiver le BackFace Culling de ton pipeline de rendu
    Dans Three.js , cela doit ce "flager" sur une des propriétés du prototype Material, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    material.doubleSide = true

  9. #9
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    je suis un peu confus, je ne trouve pas la méthode dont tu parle Les méthodes de l'objet textures se rapprochent de THREE.MTLLoader.X (où X est la méthode utilisée), mais je ne trouve aucune méthode en rapport avec BackFace Culling, doubleSide ou Material
    J'en ai profité pour étudier un peu le fonctionnement au passage, et il ne fait que charger les textures. Malheureusement, je ne sais pas où se positionnent les textures utilisées dans le fichier mtl

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Peux-tu poster tes bouts de code, car je ne connais pas le loader OBJ de Three.js !

    Perso je me suis coder mon propre loader sur un format binaire regroupant géométrie et materiaux dans un même fichier (c’est beaucoup plus simple que ce format OBJ/MTL )

    La callback de mon loader reçoit la géométrie et un array de matériaux, à partir duquel j’instancie un Mesh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var loader = new THREE.Ms3dLoader();
    loader.load( "models/ninja.ms3d",
    function( geometry, materials)
    {
    	geometry.computeBoundingSphere();
    	camera.position.z = geometry.boundingSphere.radius*-3;
    	mesh = new THREE.Ms3dMesh( geometry, materials[0] );
    	mesh.position.set( 0, -geometry.boundingSphere.radius/2, 0 );
    	scene.add( mesh );
    });
    Le principe pour du loader OBJ et MTL doit être sensiblement identique ! Non ?

    Pour les textures recopies les au même endroit que tes fichiers OBJ/MTL

  11. #11
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var loader = new THREE.OBJMTLLoader();
    loader.addEventListener( 'load', function ( event ) {
      var object = event.content;
      object.position.y = 0;
      scene.add( object );
    });
    loader.load( 'obj/CANARI.obj', 'obj/CANARI.mtl' );
    Voilà le petit bout de code qui me permet de charger les objets. Tout ce qui concerne la couleur et les textures se trouve dans le fichier mtl. Le reste du code se charge de la scène, des lumières, de l'animation, ... Les loaders sont disponibles ici (pour le OBJ) et ici (pour le mtl). Les modèles doivent se charger a peu près de la même façon (le format obj est une sorte de langage à balises) mais je n'avais pas le temps (et pas la conaissance) pour créer un loader personnalisé.

    J'ai demandé de l'aide sur la partie 3D de ce site, et apparemment, ça vient du modèle (il a des faces mal orientées). Je repasserais pour confirmer que le problème viens bien de là.

  12. #12
    Membre habitué
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    Ca venait de la façon dont je chargeais le modèle. Voici la correction du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var loader = new THREE.OBJMTLLoader();
    loader.addEventListener( 'load', function ( event ) {
     
       var object = event.content;
     
       object.position.y = 0;//position de l'objet
     
       object.traverse( function( node ) {
          if( node.material ) {
             node.material.side = THREE.DoubleSide;
          }
       });
       scene.add( object );
     
    });
    loader.load( 'CANARI.obj', 'CANARI.mtl' );//Chargement de l'assemblage et des textures
    Merçi pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Charger des fichiers .dat
    Par vbbarent dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/04/2007, 21h05
  2. [VB6]Charger des fichiers à partir d'un répertoire
    Par issaines dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 09/04/2006, 19h29
  3. PHP5: charger des fichiers textes dans une base MYSQL
    Par koueletbak dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/03/2006, 11h14
  4. Charger des fichiers d'un repertoire
    Par demanghonj dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 05/01/2005, 17h23
  5. [Dexplore] Comment charger des fichiers d'aide ?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 5
    Dernier message: 04/01/2005, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo