Javascript 在Three.js中使用带有JSONLoader的.getObjectById()访问多个OBJ

Javascript 在Three.js中使用带有JSONLoader的.getObjectById()访问多个OBJ,javascript,json,three.js,blender,loader,Javascript,Json,Three.js,Blender,Loader,是否可以区分从blender导出的一个.js文件中的网格,并使用Three.js分别为其设置动画 我要选择的多维数据集名为“cube”,并正确加载。但是,当我试图通过名称或Id获取它时,它无法识别var item1 loader = new THREE.JSONLoader(); loader.load('engine.js', function (geometry, materials) { var mesh, material; material = new THREE.Mesh

是否可以区分从blender导出的一个.js文件中的网格,并使用Three.js分别为其设置动画

我要选择的多维数据集名为“cube”,并正确加载。但是,当我试图通过名称或Id获取它时,它无法识别var item1

loader = new THREE.JSONLoader();

loader.load('engine.js', function (geometry, materials) {
  var mesh, material;

  material = new THREE.MeshFaceMaterial(materials);
  mesh = new THREE.Mesh(geometry, material);
  mesh.scale.set(1, 1, 1);

  var item1 = scene.getObjectByName("Cube");
  item1.position.x = 15;

  scene.add(mesh);
});
我找到了这篇文章,但似乎没有解决:

通过JSONLoader加载多个网格的最佳方法是什么?我更喜欢将它们作为一个.js文件加载在一起,只需选择我想要设置动画的那些文件


谢谢你的帮助

在blender场景中,您需要在three.js中分别命名要访问的每个网格。然后可以使用Object3D.getObjectByName()访问three.js中的网格

是的,可以从Blender导出的json文件加载包含多个网格的整个场景 您可以在的上看到所描述的完整过程

因此,可以使用
getObjectByName
方法区分网格,并分别对其进行操作。但重要的是要知道加载的对象不再是几何体。它现在已标记为场景类型,必须以不同的方式处理

您必须更改加载代码,如下所示:

    loader = new THREE.JSONLoader();
    loader.load( "obj/Books.json", function ( loadedObj ) {
        var surface = loadedObj.getObjectByName("Surface");
        var outline = loadedObj.getObjectByName("Outline");
        var mask = loadedObj.getObjectByName("Mask");
        mask.scale.set(0.9, 0.9, 0.9);
        scene.add(surface);
        scene.add(outline);
        scene.add(mask);
    } );

在上面的代码中,我们确实可以独立设置曲面、轮廓和遮罩网格的动画。

感谢您的回复。我偶然发现了一些关于使用SceneLoader()的博客。加载多组网格是否更好?两种方法的优缺点是什么?再次感谢您的时间和努力!所以要说清楚,因为我是javascript新手。您是否建议我访问blender中名为“item1”的网格,并使用以下代码移动它Object3D.getObjectByName(“item1”).position.x=50;不幸的是,这不起作用。
Object3D.getObjectByName()
是函数的签名。您可以像在代码中一样使用它(只要您的对象带有来自blender的名称)。