texture.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*jshint esversion: 6 */
  2. let blender_texture_cache = {};
  3. module.exports = function createThreeJSTexture(image) {
  4. let base64 = require("base64-js");
  5. let parsed_blend_file = image.__blender_file__;
  6. let texture = null;
  7. let name = image.aname;
  8. if (image.packedfile) {
  9. if (blender_texture_cache[name]) {
  10. texture = blender_texture_cache[name];
  11. } else {
  12. //get the extension
  13. let ext = name.split('.').pop();
  14. let data = image.packedfile;
  15. let size = data.size;
  16. let offset = data.data.__data_address__;
  17. let raw_data = parsed_blend_file.byte.slice(offset, offset + size);
  18. let encodedData = base64.fromByteArray(raw_data);
  19. let dataURI;
  20. switch (ext) {
  21. case "png":
  22. dataURI = "data:image/png;base64," + encodedData;
  23. break;
  24. case "jpg":
  25. dataURI = "data:image/jpeg;base64," + encodedData;
  26. break;
  27. }
  28. let img = new Image();
  29. img.src = dataURI;
  30. texture = new THREE.Texture(img);
  31. img.onload = () => {
  32. texture.needsUpdate = true;
  33. };
  34. blender_texture_cache[name] = texture;
  35. }
  36. }
  37. return texture;
  38. };