作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试将一些 Geometry
加载和处理卸载到 web worker 中。要将其发送回主线程,需要对 Geometry
实例进行序列化,而且 Geometry.prototype.toJSON()
似乎正是用于此类事情.
但我不知道如何在主线程中将该对象变回 Geometry
实例。应该如何使用 toJSON()
输出?
PS:我看过this related question , 但它似乎过时了。 toJSON()
还没有在 API 中。接受的答案有点令人费解,并且需要我仍然在主线程中做一些原始工作。
最佳答案
如果我理解正确,问题是:
这样做的问题是,从 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/
我是一名优秀的程序员,十分优秀!