gpt4 book ai didi

javascript - Three.js - 如何反序列化 geometry.toJSON()? (geometry.fromJSON 在哪里?)

转载 作者:数据小太阳 更新时间:2023-10-29 04:36:50 33 4
gpt4 key购买 nike

我正在尝试将一些 Geometry 加载和处理卸载到 web worker 中。要将其发送回主线程,需要对 Geometry 实例进行序列化,而且 Geometry.prototype.toJSON() 似乎正是用于此类事情.

但我不知道如何在主线程中将该对象变回 Geometry 实例。应该如何使用 toJSON() 输出?

PS:我看过this related question , 但它似乎过时了。 toJSON() 还没有在 API 中。接受的答案有点令人费解,并且需要我仍然在主线程中做一些原始工作。

最佳答案

如果我理解正确,问题是:

  • 您有一个要作为几何体(obj、STL 等)加载的文件。
  • 您想在 WebWorker 中加载此文件。
  • 然后您想要将几何图形发送回主脚本。
  • 因此您正在考虑将文件作为 JSON 发送回主线程,因为不支持发送对象。
  • 然后您将在主线程上将 json 转换为几何图形。

这样做的问题是,从 JSON 字符串转换为几何是另一个加载操作(这就是为什么有 JSONLoader),所以此时您还不如在主线程上完成加载。

我使用的方法是将文件加载到顶点和法线的平面数组中,然后将它们发送回主线程以添加到 BufferGeometry。您还可以使用可转移对象来提高速度。

// worker.js

var vertices = new Float32Array( faces * 3 * 3 );
var normals = new Float32Array( faces * 3 * 3 );

// Load your file into the arrays somehow.

var message = {
status:'complete',
vertices: vertices,
normals: normals
};

postMessage(message, [message.vertices.buffer, message.normals.buffer]);

// app.js

onmessage = function (event) {

var vertices = event.data.vertices;
var normals = event.data.normals;

var geometry = new THREE.BufferGeometry();
geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
geometry.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) );

var material = new THREE.MeshPhongMaterial();

var mesh = new THREE.Mesh( geometry, material );

// Do something with it.

};

关于javascript - Three.js - 如何反序列化 geometry.toJSON()? (geometry.fromJSON 在哪里?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736104/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com