【问题标题】:Accessing multiple objs using .getObjectById() with JSONLoader in Three.js在 Three.js 中使用带有 JSONLoader 的 .getObjectById() 访问多个对象
【发布时间】:2014-10-26 13:46:06
【问题描述】:

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

我要选择的立方体名为“Cube”,加载正确。但是,当我尝试通过 Name 或 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);
});

我找到了这个帖子,但似乎没有解决:Three.js load multiple separated objects / JSONLoader

通过 JSONLoader 加载多个网格的最佳方法是什么?我更愿意将它们作为一个 .js 文件一起加载,然后选择我想要制作动画的那些。

感谢您的帮助!

【问题讨论】:

    标签: javascript json three.js blender loader


    【解决方案1】:

    在您的搅拌机场景中,您需要在 three.js 中命名您想要独立访问的每个网格。然后你可以使用 Object3D.getObjectByName() 在three.js中访问你的网格。

    【讨论】:

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

    是的,可以从 Blender 导出的 json 文件中加载包含多个网格的整个场景! 你可以在我的answercited post看到完整的过程

    因此,您可以使用getObjectByName 方法区分网格并分别操作它们。但重要的是要知道加载的对象不再是 Geometry。它现在被标记为 Scene 类型,必须以不同的方式处理。

    你必须像这样更改加载代码:

        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);
        } );
    

    在上面的代码中,我们确实可以独立地为表面、轮廓和蒙版网格设置动画。

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2012-11-19
      • 2017-03-19
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多