index.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /// <reference path="../../babylon.js" />
  2. if (BABYLON.Engine.isSupported()) {
  3. var canvas = document.getElementById("renderCanvas");
  4. var engine = new BABYLON.Engine(canvas, true);
  5. var divFps = document.getElementById("fps");
  6. var htmlInput = document.getElementById("files");
  7. var btnFullScreen = document.getElementById("btnFullscreen");
  8. var btnDownArrow = document.getElementById("btnDownArrow");
  9. var perffooter = document.getElementById("perf");
  10. var btnPerf = document.getElementById("btnPerf");
  11. var miscCounters = document.getElementById("miscCounters");
  12. var help01 = document.getElementById("help01");
  13. var help02 = document.getElementById("help02");
  14. var loadingText = document.getElementById("loadingText");
  15. var filesInput;
  16. var currentHelpCounter;
  17. var currentScene;
  18. var enableDebugLayer = false;
  19. var enableArcRotateCamera = false;
  20. var arcRotateCamera;
  21. var defaultCamera;
  22. currentHelpCounter = localStorage.getItem("helpcounter");
  23. BABYLON.Engine.ShadersRepository = "/src/Shaders/";
  24. if (!currentHelpCounter) currentHelpCounter = 0;
  25. // Resize
  26. window.addEventListener("resize", function () {
  27. engine.resize();
  28. });
  29. var sceneLoaded = function (sceneFile, babylonScene) {
  30. function displayDebugLayerAndLogs() {
  31. currentScene.debugLayer._displayLogs = true;
  32. enableDebugLayer = true;
  33. currentScene.debugLayer.show();
  34. };
  35. function hideDebugLayerAndLogs() {
  36. currentScene.debugLayer._displayLogs = false;
  37. enableDebugLayer = false;
  38. currentScene.debugLayer.hide();
  39. };
  40. if (enableDebugLayer) {
  41. hideDebugLayerAndLogs();
  42. }
  43. currentScene = babylonScene;
  44. document.title = "BabylonJS - " + sceneFile.name;
  45. // Fix for IE, otherwise it will change the default filter for files selection after first use
  46. htmlInput.value = "";
  47. // In case of error during loading, meshes will be empty and clearColor is set to red
  48. if (currentScene.meshes.length === 0 && currentScene.clearColor.r === 1 && currentScene.clearColor.g === 0 && currentScene.clearColor.b === 0) {
  49. document.getElementById("logo").className = "";
  50. canvas.style.opacity = 0;
  51. displayDebugLayerAndLogs();
  52. }
  53. else {
  54. if (BABYLON.Tools.errorsCount > 0) {
  55. displayDebugLayerAndLogs();
  56. }
  57. document.getElementById("logo").className = "hidden";
  58. canvas.style.opacity = 1;
  59. if (currentScene.activeCamera.keysUp) {
  60. currentScene.activeCamera.keysUp.push(90); // Z
  61. currentScene.activeCamera.keysUp.push(87); // W
  62. currentScene.activeCamera.keysDown.push(83); // S
  63. currentScene.activeCamera.keysLeft.push(65); // A
  64. currentScene.activeCamera.keysLeft.push(81); // Q
  65. currentScene.activeCamera.keysRight.push(69); // E
  66. currentScene.activeCamera.keysRight.push(68); // D
  67. }
  68. defaultCamera = currentScene.activeCamera;
  69. var worldExtends = currentScene.getWorldExtends();
  70. var worldCenter = worldExtends.min.add(worldExtends.max.subtract(worldExtends.min).scale(0.5));
  71. arcRotateCamera = new BABYLON.ArcRotateCamera("arcRotateCamera", 0, 0, 10, BABYLON.Vector3.Zero(), currentScene);
  72. arcRotateCamera.setPosition(new BABYLON.Vector3(worldCenter.x, worldCenter.y, worldExtends.min.z - (worldExtends.max.z - worldExtends.min.z)));
  73. arcRotateCamera.setTarget(worldCenter);
  74. arcRotateCamera.wheelPrecision = 100.0;
  75. arcRotateCamera.minZ = 0.1;
  76. arcRotateCamera.maxZ = 1000;
  77. if(enableArcRotateCamera){
  78. currentScene.activeCamera = arcRotateCamera;
  79. currentScene.activeCamera.attachControl(canvas);
  80. }
  81. }
  82. };
  83. filesInput = new BABYLON.FilesInput(engine, null, canvas, sceneLoaded);
  84. filesInput.monitorElementForDragNDrop(canvas);
  85. window.addEventListener("keydown", function (evt) {
  86. // Press R to reload
  87. if (evt.keyCode === 82) {
  88. filesInput.reload();
  89. }
  90. });
  91. htmlInput.addEventListener('change', function (event) {
  92. var filestoLoad;
  93. // Handling data transfer via drag'n'drop
  94. if (event && event.dataTransfer && event.dataTransfer.files) {
  95. filesToLoad = event.dataTransfer.files;
  96. }
  97. // Handling files from input files
  98. if (event && event.target && event.target.files) {
  99. filesToLoad = event.target.files;
  100. }
  101. if (filesToLoad && filesToLoad.length > 0) {
  102. enableArcRotateCamera= false;
  103. for (var i = 0; i < filesToLoad.length; i++) {
  104. var extension = filesToLoad[i].name.split('.').pop();
  105. if (extension === "gltf" || extension === "glb")
  106. {
  107. enableArcRotateCamera= true;
  108. break;
  109. }
  110. }
  111. }
  112. filesInput.loadFiles(event);
  113. }, false);
  114. btnFullScreen.addEventListener('click', function () {
  115. engine.switchFullscreen(true);
  116. }, false);
  117. btnPerf.addEventListener('click', function () {
  118. if (currentScene) {
  119. if (!enableDebugLayer) {
  120. currentScene.debugLayer.show();
  121. enableDebugLayer = true;
  122. } else {
  123. currentScene.debugLayer.hide();
  124. enableDebugLayer = false;
  125. }
  126. }
  127. }, false);
  128. btnCamera.addEventListener('click', function () {
  129. if (currentScene) {
  130. if (!enableArcRotateCamera) {
  131. currentScene.activeCamera = arcRotateCamera;
  132. currentScene.activeCamera.attachControl(canvas);
  133. enableArcRotateCamera = true;
  134. }
  135. else {
  136. currentScene.activeCamera = defaultCamera;
  137. currentScene.activeCamera.attachControl(canvas);
  138. enableArcRotateCamera = false;
  139. }
  140. }
  141. }, false);
  142. // The help tips will be displayed only 5 times
  143. if (currentHelpCounter < 5) {
  144. help01.className = "help shown";
  145. setTimeout(function () {
  146. help01.className = "help";
  147. help02.className = "help2 shown";
  148. setTimeout(function () {
  149. help02.className = "help2";
  150. localStorage.setItem("helpcounter", currentHelpCounter + 1);
  151. }, 5000);
  152. }, 5000);
  153. }
  154. }