index.js 5.9 KB

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