使用 toJSON 和 BufferGeometryLoader 在 three.js 中序列化和反序列化几何图形。将几何图形作为字符串传输

Serializing and deserializing geometry in three.js using toJSON and BufferGeometryLoader. Transferring geometries as string

首先 - 我是 three.js 的初学者,我只是想分享我的经验。
我的任务是将几何转换成某种东西并将其传输到另一个 WebWorker(你不能在工作人员之间传输所有对象,只能传输 structured cloneable datatypes。所以我打开文档并尝试使用 .toJSON,然后使用 BufferGeometryLoader(以及许多其他方法)。

const box = new BoxBufferGeometry();
const geomJSON = box.toJSON();
const geometriesLoader = new THREE.BufferGeometryLoader();
const parsedGeom = geometriesLoader.parse(geomJSON);
const mesh = new Mesh(parsedGeom);
this.scene.add(mesh);

我收到了这个错误:

此外,我尝试了其他类型的加载器,JSON.stringify,等等。但是只有在 GLTF 文件中用几何体打包网格并使用回调对其进行序列化似乎可行(不是很方便)。

我向 holy Internet 寻求帮助,但他没有听到我的声音。文档只说:

.toJSON () : Object Convert the buffer geometry to three.js JSON Object/Scene format.

Three.js 版本: 0.135.0 和 0.136.0

所以,我以为我会死,但后来我无意中发现了那个功能:.toNonIndexed()

const box = new BoxBufferGeometry();
const geomJSON = box.toNonIndexed().toJSON();
const geometriesLoader = new THREE.BufferGeometryLoader();
const parsedGeom = geometriesLoader.parse(geomJSON);
const mesh = new Mesh(parsedGeom);
this.scene.add(mesh);

我不确定它的作用,但至少它现在可以工作了,而且我可以在序列化后看到我的几何图形。不过我不确定它不会引起其他问题。

如果你在three.js方面更有经验,那么请给我和其他菜鸟更多关于这个问题的信息.toJSON 的目的。谢谢