如何使用three.js查找.OBJ 3D模型的子部分?

时间:2016-10-21 07:06:33

标签: three.js .obj

我需要实现一个功能,用户可以上传OBJ 3D模型,然后我将在浏览器中显示该模型的不同子部分。 (与https://www.sculpteo.com相同。)。

但我无法找到OBJ模型的子部分。我正在使用three.js在浏览器中显示OBJ模型。

有没有办法使用three.js找到OBJ模型的子部件?

我正在共享代码以加载OBJ模型=>

var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath( 'path' );
mtlLoader.load( 'model.mtl', function( materials ) {
  materials.preload();

  var objLoader = new THREE.OBJLoader();
  objLoader.setMaterials( materials );
  objLoader.setPath( 'path' );
  objLoader.load( 'model.obj', function ( object ) {
    scene.add( object);
  });
});

现在我不知道如何找到这个“model.obj”的子部分。请帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

OJBLoader返回( THREE.Object3D()(它在r71中))THREE.Group()(r81),子项为THREE.Mesh。

只有当.obj文件包含对象组时,才会将子部件作为对象的子网格物体。没有它,你只会得到一个神圣的儿童网。 阅读Wavefront .obj file format。 因此,如果您的子部件数据分组在

o [object name]

标签,然后你将拥有尽可能多的子网格" o"您的.obj文件中的组,然后您可以遍历。

更新#1:它也适用于" g"标签。

g [group name]

example基于" webgl_interactive_cubes"来自Threejs.org,子项的数据与" g" .obj文件中的标签(skull,uteeth,jaw,lteeth)

答案 1 :(得分:0)

加载对象时,可以在回调函数中执行此操作:

   objLoader.load('yourUrl.obj', function (object) {
     object.traverse(function (child) {
       if (child instanceof THREE.Mesh) {
         console.log(child);
         // here you can make what you want with the children of object
       }
     });
   });