Javascript 在Three.js中的一个json几何体中存储多个对象

Javascript 在Three.js中的一个json几何体中存储多个对象,javascript,json,three.js,Javascript,Json,Three.js,您可以轻松地将BufferGeometry存储为json,并使用BufferGeometryLoader加载它: { "metadata": { "version": 3, "type": "Geometry", "normal": 30, "position": 30, "generator": "io_three" }, "data": { "index": { "array": [ 0, 1, 2, 3, …],

您可以轻松地将BufferGeometry存储为json,并使用BufferGeometryLoader加载它:

{
  "metadata": {
    "version": 3,
    "type": "Geometry",
    "normal": 30,
    "position": 30,
    "generator": "io_three"
  },
  "data": {
    "index": {
      "array": [ 0, 1, 2, 3, …],
      "type": "Uint16Array",
      "itemSize": 1
    },
    "attributes": {
      "normal": {
        "array": [ -1, 0, 0, -1, …],
        "type": "Float32Array",
        "itemSize": 3
      },
      "position": {
        "array": [ -1, 1, 1, -1, …],
        "type": "Float32Array",
        "itemSize": 3
      }
    },
    "groups": [
      {
        "count": 48,
        "start": 0,
        "materialIndex": 0
      }
    ]
  }
}
要加载它,您可以使用以下代码:

var loader = new THREE.BufferGeometryLoader();
loader.load(
'JS/Sample1.json',
function (geometry) {
    var mesh = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial({}));
    scene.add(mesh);
    renderer.render(scene, camera);
    }
);
现在的问题是以json格式存储多个几何体。有可能吗。如果是,是否有相关说明或示例?

THREE.BufferGeometryLoader只能为每个请求加载一个BufferGeometry实例。如果不希望实现自定义解决方案,则必须使用单独的load调用加载每个几何图形。比如:

var loader = new THREE.BufferGeometryLoader();
loader.load( 'JS/Sample1.json', geometry => {...} );
loader.load( 'JS/Sample2.json', geometry => {...} );
loader.load( 'JS/Sample3.json', geometry => {...} );

另一种方法是使用由THREE.ObjectLoader实现的。但是,此格式旨在表示三维对象,如网格、线和点云以及相应的对象层次。因此,仅序列化/反序列化几何体对象数组是不可能的。您必须处理对象/场景级别。

谢谢,在该项目中,将有80个几何体,每个几何体最多有20个顶点。你认为加载需要很长时间吗?好吧,浏览器的并行网络请求量是最大的。因此,它将比加载单个文件更慢。另一种选择可能是将所有JSON文件推送到一个zip存档中,加载此文件,然后使用JSZip将其解压。然后,您可以尝试使用单个JSON数据直接调用BufferGeometryLoader.parse。但是,我还没有测试过这个,所以我不确定它是否有效。。。