loaders.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. importScripts('../libs/threejs/three.min.js', '../libs/threejs/OBJLoader.js' /*,'../libs/threejs/draco/DRACOLoader.js','../libs/threejs/draco/draco_decoder.js'*/ )
  2. var manager = new THREE.LoadingManager();
  3. manager.onProgress = function(url, loaded, total) {
  4. var progress = parseInt(loaded / total * 100)
  5. self.postMessage({ cmd: 'progress', progress: progress });
  6. };
  7. manager.onLoad = function() {
  8. console.log('done')
  9. };
  10. onmessage = function(e) {
  11. var data = e.data;
  12. switch (data.cmd) {
  13. case 'loadParticles':
  14. loadParticles(data.files);
  15. break;
  16. case 'loadModels':
  17. loadModels(data.files);
  18. break;
  19. case 'loadModelsTexture':
  20. loadModelsTexture(data.files, data.size);
  21. break;
  22. }
  23. }
  24. function loadTitles(files) {
  25. var loader = new THREE.FileLoader(manager).setResponseType('arraybuffer').setPath('../titles/')
  26. files.forEach(function(file) {
  27. loader.load(file.image + '.png', function(buffer) {
  28. console.log(buffer)
  29. self.postMessage({ cmd: 'loadTitles', file: { type: 'image', name: file.name, format: 'png', buffer: buffer } }, [buffer]);
  30. })
  31. loader.load(file.mask + '.png', function(buffer) {
  32. self.postMessage({ cmd: 'loadTitles', file: { type: 'mask', name: file.name, format: 'png', buffer: buffer } }, [buffer]);
  33. })
  34. });
  35. }
  36. function loadParticles(files) {
  37. var loader = new THREE.FileLoader(manager).setResponseType('json').setPath('../')
  38. files.forEach(function(file) {
  39. loader.load(file, function(data) {
  40. var positions = new Float32Array(data.aPos);
  41. var numPoints = positions.length;
  42. var ranking = new Float32Array(numPoints);
  43. for (var i = 0; i < numPoints; i++)
  44. {
  45. ranking[i] = i / numPoints;
  46. }
  47. self.postMessage({ cmd: 'loadParticles', file: { positions: positions.buffer, ranking: ranking.buffer } }, [positions.buffer, ranking.buffer]);
  48. })
  49. });
  50. }
  51. function loadModelsTexture(files, size) {
  52. var loader = new THREE.FileLoader(manager).setResponseType('arraybuffer').setPath('../models/')
  53. files.forEach(function(file) {
  54. loader.load(file + (size ? '_' + size : '') + '.jpg', function(buffer) {
  55. self.postMessage({ cmd: 'loadModelsTexture', file: { name: file, buffer: buffer } }, [buffer]);
  56. })
  57. })
  58. }
  59. function loadModels(files) {
  60. var loader = new THREE.OBJLoader(manager).setPath('../models/')
  61. files.forEach(function(file) {
  62. loader.load(file + '.obj', function(obj) {
  63. var geometry = obj.children[0]["geometry"]
  64. var uv = geometry.attributes.uv.array.buffer
  65. var normal = geometry.attributes.normal.array.buffer
  66. var position = geometry.attributes.position.array.buffer
  67. self.postMessage({ cmd: 'loadModels', file: { name: file, uv: uv, normal: normal, position: position } }, [uv, normal, position]);
  68. })
  69. })
  70. }