blend_three.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*jshint esversion: 6 */
  2. const createMaterial = require("./material.js");
  3. const createTexture = require("./texture.js");
  4. const createMesh = require("./mesh.js");
  5. const createLight = require("./light.js");
  6. const blender_object_types = {
  7. mesh: 1,
  8. lamp: 10
  9. };
  10. function createObject(blender_file, object) {
  11. if (object.data) {
  12. //get the mesh
  13. var buffered_geometry = createMesh(object.data, [0, 0, 0]);
  14. var blend_material = object.data.mat[0];
  15. if (blend_material) {
  16. var material = createMaterial(blend_material);
  17. }
  18. var mesh = new THREE.Mesh(buffered_geometry, material);
  19. mesh.castShadow = true;
  20. mesh.receiveShadow = true;
  21. mesh.rotateZ(object.rot[2]);
  22. mesh.rotateY(object.rot[1]);
  23. mesh.rotateX(object.rot[0]);
  24. mesh.scale.fromArray(object.size, 0);
  25. mesh.position.fromArray([object.loc[0], (object.loc[2]), (-object.loc[1])], 0);
  26. return mesh;
  27. }
  28. return null;
  29. }
  30. function loadObject(object_name, blender_file, cache) {
  31. var objects = blender_file.Object;
  32. materials = [];
  33. for (var i = 0; i < objects.length; i++) {
  34. let object = objects[i];
  35. if (object.aname === object_name) {
  36. switch (object.type) {
  37. case blender_object_types.mesh:
  38. return createObject(object, blender_file);
  39. break;
  40. case blender_object_types.lamp:
  41. return createLight(object, blender_file);
  42. break;
  43. }
  44. }
  45. }
  46. return null;
  47. }
  48. function loadScene(three_scene, blender_file, cache) {
  49. for (let i = 0; i < blender_file.objects.Object.length; i++) {
  50. let object = blender_file.objects.Object[i];
  51. //Load Lights
  52. if (object.type == blender_object_types.lamp) {
  53. let light = createLight(blender_file, object);
  54. three_scene.add(light);
  55. }
  56. //Load Meshes
  57. if (object.type == blender_object_types.mesh) {
  58. let mesh = createObject(blender_file, object);
  59. if(mesh){
  60. three_scene.add(mesh);
  61. }
  62. }
  63. }
  64. }
  65. module.exports = (blender_file) => {
  66. if (!THREE) {
  67. console.warn("No ThreeJS object detected");
  68. return {};
  69. }
  70. var cache = {};
  71. return {
  72. loadScene: (three_scene) => loadScene(three_scene, blender_file, cache),
  73. loadObject: (object_name) => loadObject(object_name, blender_file, cache)
  74. };
  75. };