index.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. arcRotateCamera = new BABYLON.ArcRotateCamera("camera", 4.71238898038469, 1.5707963267948966, 3, BABYLON.Vector3.Zero(), currentScene);
  70. arcRotateCamera.wheelPrecision = 100.0;
  71. arcRotateCamera.minZ = 0.1;
  72. arcRotateCamera.maxZ = 1000;
  73. if(enableArcRotateCamera){
  74. currentScene.activeCamera = arcRotateCamera;
  75. currentScene.activeCamera.attachControl(canvas);
  76. }
  77. }
  78. };
  79. filesInput = new BABYLON.FilesInput(engine, null, canvas, sceneLoaded);
  80. filesInput.monitorElementForDragNDrop(canvas);
  81. window.addEventListener("keydown", function (evt) {
  82. // Press R to reload
  83. if (evt.keyCode === 82) {
  84. filesInput.reload();
  85. }
  86. });
  87. htmlInput.addEventListener('change', function (event) {
  88. var filestoLoad;
  89. // Handling data transfer via drag'n'drop
  90. if (event && event.dataTransfer && event.dataTransfer.files) {
  91. filesToLoad = event.dataTransfer.files;
  92. }
  93. // Handling files from input files
  94. if (event && event.target && event.target.files) {
  95. filesToLoad = event.target.files;
  96. }
  97. if (filesToLoad && filesToLoad.length > 0) {
  98. enableArcRotateCamera= false;
  99. for (var i = 0; i < filesToLoad.length; i++) {
  100. var extension = filesToLoad[i].name.split('.').pop();
  101. if (extension === "gltf" || extension === "glb")
  102. {
  103. enableArcRotateCamera= true;
  104. break;
  105. }
  106. }
  107. }
  108. filesInput.loadFiles(event);
  109. }, false);
  110. btnFullScreen.addEventListener('click', function () {
  111. engine.switchFullscreen(true);
  112. }, false);
  113. btnPerf.addEventListener('click', function () {
  114. if (currentScene) {
  115. if (!enableDebugLayer) {
  116. currentScene.debugLayer.show();
  117. enableDebugLayer = true;
  118. } else {
  119. currentScene.debugLayer.hide();
  120. enableDebugLayer = false;
  121. }
  122. }
  123. }, false);
  124. btnCamera.addEventListener('click', function () {
  125. if (currentScene) {
  126. if (!enableArcRotateCamera) {
  127. currentScene.activeCamera = arcRotateCamera;
  128. currentScene.activeCamera.attachControl(canvas);
  129. enableArcRotateCamera = true;
  130. }
  131. else {
  132. currentScene.activeCamera = defaultCamera;
  133. currentScene.activeCamera.attachControl(canvas);
  134. enableArcRotateCamera = false;
  135. }
  136. }
  137. }, false);
  138. // The help tips will be displayed only 5 times
  139. if (currentHelpCounter < 5) {
  140. help01.className = "help shown";
  141. setTimeout(function () {
  142. help01.className = "help";
  143. help02.className = "help2 shown";
  144. setTimeout(function () {
  145. help02.className = "help2";
  146. localStorage.setItem("helpcounter", currentHelpCounter + 1);
  147. }, 5000);
  148. }, 5000);
  149. }
  150. }