Partage
  • Partager sur Facebook
  • Partager sur Twitter

THREE.js - THREE.OBJLoader et Physijs.ConcaveMesh

Problème lors de l'application Physijs.ConcaveMesh() sur un .obj

    14 mai 2022 à 8:57:40

    Bonjour à tous,

    Je débute dans la programmation javascript, et j'ai un petit projet ou j'ai besoin d'afficher des objets 3d.

    Pour se faire j'utilise THREE.js, j'ai dessiné mes objets à l'aide de fusion360, que j'ai ensuite exporté en .obj.

    Tout se passe bien lorsque je réalise une simple importation avec THREE.OBJLoader().

    Evoluant dans mon projet, je souhaite intégrer une gestion de collision de mes éléments 3d.

    Pour ça j'utilise Pysijs (j'ai également essayé avec CANNON-ES, mais j'ai la meme erreur), j'arrive à utiliser Physijs sur des objets simple créé directement depuis TREE.js mais impossible d'appliquer  Physijs.ConcaveMesh() sur mon objet importé .obj, il semble avoir un problème avec la structure obtenue lors de l'importation, le .obj obtenue avec fusion360 ne fonctionne pas, j'ai également essayé d'exporter un simple cube de Blender et j'ai le meme soucis.

    Je dois certainement faire faire une erreur quelque part, c'est pourquoi j'ai besoin des conseils de quelqu'un, je n'arrive pas a trouver de solution depuis plusieurs jours de recherche sur différents sites.

    voilà le code que j'utilise pour afficher mes objets (exemple avec un seule objet) :

      var loader = new THREE.OBJLoader();
    
      var meshPad01;
      var meshPad02;
      var meshPad03;
      var meshPad04;
    
      var padMaterial = new THREE.MeshPhongMaterial({
        color: 0x606060,
      });
    
      
      // add pad01.obj
      loader.load("./pad01.obj", function (object) {
    
        object.material = padMaterial;
        
        object.children[0].geometry.computeBoundingBox();
        object.children[0].material = padMaterial;
        object.children[0].geometry.computeVertexNormals();
        object.children[0].geometry.computeFaceNormals();
        object.children[0].castShadow = true;
        object.children[0].receiveShadow = true;
        console.log(object, "child");
        
        object.rotation.x = -0.5 * Math.PI;
        object.position.set(0, 0, 200);
        object.castShadow = true;
        object.receiveShadow = true;
        //object.geometry.computeBoundingBox();
        console.log(object, "pad01");
        //var meshPad01_2 = new Physijs.ConcaveMesh(object.children[0].geometry, padMaterial, 1);
        scene.add(object);
      });

    affichage correct

    et voila le message d'erreur que j'obtient lorsque j'utilise :

    var meshPad01_2 = new Physijs.ConcaveMesh(object.children[0].geometry, padMaterial, 1);
        scene.add(meshPad01_2);

    TypeError: undefined is not an object (evaluating 'geometry.faces.length')

    data estruture .obj

    Est-ce que quelqu'un a déjà rencontré ce type de problème ? et comment puis-je solutionner ça ?

    merci d'avance pour votre aide et vos conseils

    Jimmy

    -
    Edité par jimmyso59162 14 mai 2022 à 9:00:06

    • Partager sur Facebook
    • Partager sur Twitter

    THREE.js - THREE.OBJLoader et Physijs.ConcaveMesh

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown