mhe*_*ens 7 javascript serialization deserialization three.js
我正在尝试将一些Geometry加载和处理卸载到Web worker中.要将它发送回主线程,Geometry实例需要被序列化,并且它似乎Geometry.prototype.toJSON()就是针对这种类型的事情.
但我无法弄清楚如何将该对象转回Geometry主线程中的实例.如何使用toJSON()输出?
PS:我看过这个相关的问题,但似乎过时了.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.
};
您可以JSONLoader像这样使用反序列化几何体:
var geometry = new THREE.Geometry();
var serializedGeometry = geometry.toJSON();
var jsonLoader = new THREE.JSONLoader();
var result = jsonLoader.parse(serializedGeometry.data);
var unserializedGeometry = result.geometry;
小智 3
为什么不直接使用 JSONLoader 呢?
myloader = new THREE.JSONLoader()
myloader.load("path/to/json", function(geometry,material){
    mesh = new THREE.Mesh(geometry,material)
    scene.add(mesh)
})
或以同样的方式加载 JSON 文件
| 归档时间: | 
 | 
| 查看次数: | 2673 次 | 
| 最近记录: |