importScripts('../libs/threejs/three.min.js', '../libs/threejs/OBJLoader.js' /*,'../libs/threejs/draco/DRACOLoader.js','../libs/threejs/draco/draco_decoder.js'*/ ) var manager = new THREE.LoadingManager(); manager.onProgress = function(url, loaded, total) { var progress = parseInt(loaded / total * 100) self.postMessage({ cmd: 'progress', progress: progress }); }; manager.onLoad = function() { console.log('done') }; onmessage = function(e) { var data = e.data; switch (data.cmd) { case 'loadParticles': loadParticles(data.files); break; case 'loadModels': loadModels(data.files); break; case 'loadModelsTexture': loadModelsTexture(data.files, data.size); break; } } function loadTitles(files) { var loader = new THREE.FileLoader(manager).setResponseType('arraybuffer').setPath('../titles/') files.forEach(function(file) { loader.load(file.image + '.png', function(buffer) { console.log(buffer) self.postMessage({ cmd: 'loadTitles', file: { type: 'image', name: file.name, format: 'png', buffer: buffer } }, [buffer]); }) loader.load(file.mask + '.png', function(buffer) { self.postMessage({ cmd: 'loadTitles', file: { type: 'mask', name: file.name, format: 'png', buffer: buffer } }, [buffer]); }) }); } function loadParticles(files) { var loader = new THREE.FileLoader(manager).setResponseType('json').setPath('../') files.forEach(function(file) { loader.load(file, function(data) { var positions = new Float32Array(data.aPos); var numPoints = positions.length; var ranking = new Float32Array(numPoints); for (var i = 0; i < numPoints; i++) { ranking[i] = i / numPoints; } self.postMessage({ cmd: 'loadParticles', file: { positions: positions.buffer, ranking: ranking.buffer } }, [positions.buffer, ranking.buffer]); }) }); } function loadModelsTexture(files, size) { var loader = new THREE.FileLoader(manager).setResponseType('arraybuffer').setPath('../models/') files.forEach(function(file) { loader.load(file + (size ? '_' + size : '') + '.jpg', function(buffer) { self.postMessage({ cmd: 'loadModelsTexture', file: { name: file, buffer: buffer } }, [buffer]); }) }) } function loadModels(files) { var loader = new THREE.OBJLoader(manager).setPath('../models/') files.forEach(function(file) { loader.load(file + '.obj', function(obj) { var geometry = obj.children[0]["geometry"] var uv = geometry.attributes.uv.array.buffer var normal = geometry.attributes.normal.array.buffer var position = geometry.attributes.position.array.buffer self.postMessage({ cmd: 'loadModels', file: { name: file, uv: uv, normal: normal, position: position } }, [uv, normal, position]); }) }) }