Se ho capito bene il problema è:
- Hai un file che si desidera caricare come una geometria (obj, stl, eccetera.).
- Si desidera caricare questo file in un WebWorker.
- Quindi si desidera inviare nuovamente la geometria allo script principale.
- Quindi stai pensando di inviare il file al thread principale come JSON, poiché l'invio di oggetti non è supportato.
- Quindi si converte il json in una geometria sul thread principale.
Il problema di questo è che la conversione da una stringa JSON a una geometria è un'altra operazione di carico (che è il motivo per cui c'è JSONLoader), così a quel punto si può anche avete appena fatto il carico sul thread principale.
L'approccio che ho usato è di caricare il file in array flat di vertici e normali, quindi li rimando al thread principale da aggiungere a un BufferGeometry. Puoi anche usare oggetti trasferibili per guadagnare ancora più velocità.
// 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.
};
si dovrebbe guardare intorno alle classi caricatore nella documentazione: http://threejs.org/docs/# Riferimento/Caricatori/ObjectLoader – nemesv
@nemesv: Ho guardato e guardato. Queste classi non possono essere utilizzate per trasformare l'output 'toJSON() in una' Geometria'. In teoria, potrei provare a comprendere tutto il loro codice sorgente e scrivere una soluzione completa da zero, ma ciò richiederebbe molto tempo. Per lo più, non posso credere che esista un metodo di serializzazione 'toJSON(), senza un modo per deserializzare. : -/ – mhelvens
Vedere se questo aiuta: http://stackoverflow.com/questions/27992147/three-js-include-mesh-data-in-code/27996338#27996338 – WestLangley