我需要实现一个功能,用户可以上传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”的子部分。请帮助。提前谢谢。
答案 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
}
});
});