index.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. var onload = function () {
  2. var canvas = document.getElementById("renderCanvas");
  3. // Demos
  4. var demos = [
  5. {
  6. title: "TRAIN", scene: "Train", screenshot: "train.jpg", size: "70 MB", big: true, onload: function () {
  7. scene.collisionsEnabled = false;
  8. for (var index = 0; index < scene.cameras.length; index++) {
  9. scene.cameras[index].minZ = 10;
  10. }
  11. scene.activeCamera.detachControl(canvas);
  12. scene.activeCamera = scene.cameras[4];
  13. scene.activeCamera.attachControl(canvas);
  14. scene.getMaterialByName("terrain_eau").bumpTexture = null;
  15. }
  16. },
  17. {
  18. title: "ROBOT", url: "Scenes/Robot/index.html", screenshot: "robot.jpg", size: "8.5 MB", onload: function () {
  19. scene.collisionsEnabled = false;
  20. }
  21. },
  22. { title: "WORLDMONGER", url: "Scenes/Worldmonger/index.html", screenshot: "worldmonger.jpg", size: "8.5 MB" },
  23. { title: "HEART", scene: "Heart", screenshot: "heart.jpg", size: "14 MB", },
  24. {
  25. title: "ESPILIT", scene: "Espilit", screenshot: "espilit.jpg", size: "50 MB", incremental: true, onload: function () {
  26. scene.autoClear = true;
  27. scene.createOrUpdateSelectionOctree();
  28. }
  29. },
  30. { title: "WINDOWS CAFE", scene: "WCafe", screenshot: "wcafe.jpg", size: "28 MB" },
  31. {
  32. title: "FLAT 2009",
  33. scene: "Flat2009",
  34. screenshot: "flat2009.jpg",
  35. size: "44 MB",
  36. onload: function () {
  37. var ecran = scene.getMeshByName("Ecran");
  38. ecran.material.diffuseTexture = new BABYLON.VideoTexture("video", ["Scenes/Flat2009/babylonjs.mp4", "Scenes/Flat2009/babylonjs.webm"], 256, scene, true);
  39. scene.createOrUpdateSelectionOctree();
  40. }
  41. },
  42. { title: "THE CAR", scene: "TheCar", screenshot: "thecar.jpg", size: "100 MB", incremental: true },
  43. { title: "VIPER", scene: "Viper", screenshot: "viper.jpg", size: "18 MB" },
  44. { title: "SPACESHIP", scene: "Spaceship", screenshot: "spaceship.jpg", size: "1 MB" },
  45. {
  46. title: "OMEGA CRUSHER", scene: "SpaceDek", screenshot: "omegacrusher.jpg", size: "10 MB", onload: function () {
  47. scene.collisionsEnabled = false;
  48. }
  49. }];
  50. var tests = [
  51. { title: "OCTREE - 8000 spheres", id: 8, screenshot: "octree.jpg", size: "0.1 MB" },
  52. { title: "BONES", id: 9, screenshot: "bones.jpg", size: "10 MB" },
  53. { title: "CHARTING", id: 7, screenshot: "charting.jpg", size: "0.1 MB" },
  54. { title: "SHADOWS", id: 6, screenshot: "shadows.jpg", size: "1.0 MB" },
  55. { title: "HEIGHTMAP", id: 5, screenshot: "heightmap.jpg", size: "1.0 MB" },
  56. { title: "LIGHTS", id: 1, screenshot: "testlight.jpg", size: "0.1 MB" },
  57. { title: "BUMP", id: 2, screenshot: "bump.jpg", size: "0.1 MB" },
  58. { title: "FOG", id: 3, screenshot: "fog.jpg", size: "0.1 MB" },
  59. { title: "MULTIMATERIAL", id: 4, screenshot: "multimat.jpg", size: "0.1 MB" },
  60. { title: "BLENDER", scene: "blender", screenshot: "blender.jpg", size: "0.2 MB" },
  61. { title: "SCENE #1", id: 0, screenshot: "testscene.jpg", size: "10 MB" }
  62. ];
  63. var thirdParties = [
  64. { title: "CAR GAME", url: "http://babylon.azurewebsites.net", screenshot: "car.jpg", size: "by G. Carlander" },
  65. { title: "CYCLE GAME", url: "http://tronbabylon.azurewebsites.net/", screenshot: "tron.jpg", size: "by G. Carlander" },
  66. { title: "GALLERY", url: "http://guillaume.carlander.fr/Babylon/Gallery/", screenshot: "gallery.png", size: "by G. Carlander" }
  67. ];
  68. // UI
  69. var opacityMask = document.getElementById("opacityMask");
  70. var menuPanel = document.getElementById("screen1");
  71. var items = document.getElementById("items");
  72. var testItems = document.getElementById("testItems");
  73. var _3rdItems = document.getElementById("3rdItems");
  74. var renderZone = document.getElementById("renderZone");
  75. var controlPanel = document.getElementById("controlPanel");
  76. var cameraPanel = document.getElementById("cameraPanel");
  77. var wireframe = document.getElementById("wireframe");
  78. var divFps = document.getElementById("fps");
  79. var stats = document.getElementById("stats");
  80. var enableStats = document.getElementById("enableStats");
  81. var loadingBack = document.getElementById("loadingBack");
  82. var loadingText = document.getElementById("loadingText");
  83. var hardwareScalingLevel = document.getElementById("hardwareScalingLevel");
  84. var collisions = document.getElementById("collisions");
  85. var status = document.getElementById("status");
  86. var fullscreen = document.getElementById("fullscreen");
  87. var touchCamera = document.getElementById("touchCamera");
  88. var deviceOrientationCamera = document.getElementById("deviceOrientationCamera");
  89. var camerasList = document.getElementById("camerasList");
  90. var toggleFxaa = document.getElementById("toggleFxaa");
  91. var toggleFsaa4 = document.getElementById("toggleFsaa4");
  92. var toggleBandW = document.getElementById("toggleBandW");
  93. var sceneChecked;
  94. var itemClick = function (demo) {
  95. return function () {
  96. // Check support
  97. if (!BABYLON.Engine.isSupported()) {
  98. document.getElementById("notSupported").className = "";
  99. opacityMask.className = "";
  100. } else {
  101. if (demo.url) {
  102. window.location = demo.url;
  103. return;
  104. }
  105. loadScene(demo.id !== undefined ? demo.id : demo.scene, demo.incremental ? ".incremental" : "", function () {
  106. if (demo.collisions !== undefined) {
  107. scene.collisionsEnabled = demo.collisions;
  108. }
  109. if (demo.onload) {
  110. demo.onload();
  111. }
  112. });
  113. };
  114. };
  115. };
  116. var createItem = function (item, root) {
  117. var span = document.createElement("span");
  118. var img = document.createElement("img");
  119. var div = document.createElement("div");
  120. var label2 = document.createElement("label");
  121. if (item.big) {
  122. span.className = "big-item";
  123. var newImg = document.createElement("img");
  124. var newText = document.createElement("div");
  125. newImg.id = "newImg";
  126. newImg.src = "Assets/SpotLast.png";
  127. newText.innerHTML = "LAST<br>UPDATE";
  128. newText.id = "newText";
  129. span.appendChild(newImg);
  130. span.appendChild(newText);
  131. } else {
  132. span.className = "item";
  133. }
  134. img.className = "item-image";
  135. img.src = "Screenshots/" + item.screenshot;
  136. span.appendChild(img);
  137. div.className = "item-text";
  138. div.innerHTML = item.title;
  139. span.appendChild(div);
  140. label2.className = "item-text-right";
  141. label2.innerHTML = item.size;
  142. span.appendChild(label2);
  143. span.onclick = itemClick(item);
  144. root.appendChild(span);
  145. };
  146. // Demos
  147. for (var index = 0; index < demos.length; index++) {
  148. var demo = demos[index];
  149. createItem(demo, items);
  150. }
  151. // Tests
  152. for (index = 0; index < tests.length; index++) {
  153. var test = tests[index];
  154. createItem(test, testItems);
  155. }
  156. // 3rd party
  157. for (index = 0; index < thirdParties.length; index++) {
  158. var thirdParty = thirdParties[index];
  159. createItem(thirdParty, _3rdItems);
  160. }
  161. // Go Back
  162. var goBack = function () {
  163. if (scene) {
  164. scene.dispose();
  165. scene = null;
  166. }
  167. menuPanel.className = "";
  168. renderZone.className = "movedRight";
  169. };
  170. // History
  171. if (window.onpopstate !== undefined) {
  172. window.onpopstate = function () {
  173. goBack();
  174. };
  175. }
  176. // Babylon
  177. var engine = new BABYLON.Engine(canvas, true);
  178. var scene;
  179. var restoreUI = function () {
  180. loadingBack.className = "loadingBack";
  181. loadingText.className = "loadingText";
  182. menuPanel.className = "movedLeft";
  183. renderZone.className = "";
  184. opacityMask.className = "hidden";
  185. sceneChecked = true;
  186. camerasList.options.length = 0;
  187. for (var index = 0; index < scene.cameras.length; index++) {
  188. var camera = scene.cameras[index];
  189. var option = new Option();
  190. option.text = camera.name;
  191. option.value = camera;
  192. if (camera == scene.activeCamera) {
  193. option.selected = true;
  194. }
  195. camerasList.appendChild(option);
  196. }
  197. };
  198. var loadScene = function (name, incremental, then) {
  199. // Cleaning
  200. if (scene) {
  201. scene.dispose();
  202. scene = null;
  203. }
  204. sceneChecked = false;
  205. // History
  206. if (history.pushState) {
  207. history.pushState({}, name, window.location.pathname + window.location.search);
  208. }
  209. // Loading
  210. var importScene = function () {
  211. loadingBack.removeEventListener("transitionend", importScene);
  212. loadingBack.removeEventListener("webkitTransitionend", importScene);
  213. engine.resize();
  214. if (typeof name == "number") {
  215. var newScene;
  216. switch (name) {
  217. case 0:
  218. newScene = CreateTestScene(engine);
  219. break;
  220. case 1:
  221. newScene = CreateLightsTestScene(engine);
  222. break;
  223. case 2:
  224. newScene = CreateBumpScene(engine);
  225. break;
  226. case 3:
  227. newScene = CreateFogScene(engine);
  228. break;
  229. case 4:
  230. newScene = CreateMultiMaterialScene(engine);
  231. break;
  232. case 5:
  233. newScene = CreateHeightMapTestScene(engine);
  234. break;
  235. case 6:
  236. newScene = CreateShadowsTestScene(engine);
  237. break;
  238. case 7:
  239. newScene = CreateChartingTestScene(engine);
  240. break;
  241. case 8:
  242. newScene = CreateOctreeTestScene(engine);
  243. break;
  244. case 9:
  245. newScene = CreateBonesTestScene(engine);
  246. break;
  247. }
  248. scene = newScene;
  249. scene.executeWhenReady(function () {
  250. if (scene.activeCamera) {
  251. scene.activeCamera.attachControl(canvas);
  252. if (then) {
  253. then();
  254. }
  255. }
  256. // UI
  257. restoreUI();
  258. });
  259. return;
  260. };
  261. var dlCount = 0;
  262. BABYLON.SceneLoader.Load("Scenes/" + name + "/", name + incremental + ".babylon", engine, function (newScene) {
  263. scene = newScene;
  264. scene.executeWhenReady(function () {
  265. if (scene.activeCamera) {
  266. scene.activeCamera.attachControl(canvas);
  267. if (newScene.activeCamera.keysUp) {
  268. newScene.activeCamera.keysUp.push(90); // Z
  269. newScene.activeCamera.keysUp.push(87); // W
  270. newScene.activeCamera.keysDown.push(83); // S
  271. newScene.activeCamera.keysLeft.push(65); // A
  272. newScene.activeCamera.keysLeft.push(81); // Q
  273. newScene.activeCamera.keysRight.push(69); // E
  274. newScene.activeCamera.keysRight.push(68); // D
  275. }
  276. }
  277. if (then) {
  278. then();
  279. }
  280. // UI
  281. restoreUI();
  282. });
  283. }, function (evt) {
  284. if (evt.lengthComputable) {
  285. loadingText.innerHTML = "Loading, please wait..." + (evt.loaded * 100 / evt.total).toFixed() + "%";
  286. } else {
  287. dlCount = evt.loaded / (1024 * 1024);
  288. loadingText.innerHTML = "Loading, please wait..." + Math.floor(dlCount * 100.0) / 100.0 + " MB already loaded.";
  289. }
  290. });
  291. };
  292. loadingBack.addEventListener("transitionend", importScene);
  293. loadingBack.addEventListener("webkitTransitionend", importScene);
  294. loadingBack.className = "";
  295. loadingText.className = "";
  296. opacityMask.className = "";
  297. loadingText.innerHTML = "Loading, please wait...";
  298. };
  299. // Render loop
  300. var renderFunction = function () {
  301. // Fps
  302. divFps.innerHTML = BABYLON.Tools.GetFps().toFixed() + " fps";
  303. // Render scene
  304. if (scene) {
  305. if (!sceneChecked) {
  306. var remaining = scene.getWaitingItemsCount();
  307. loadingText.innerHTML = "Streaming items..." + (remaining ? (remaining + " remaining") : "");
  308. }
  309. scene.render();
  310. // Stats
  311. if (enableStats.checked) {
  312. stats.innerHTML = "Total vertices: " + scene.getTotalVertices() + "<br>"
  313. + "Active vertices: " + scene.getActiveVertices() + "<br>"
  314. + "Active particles: " + scene.getActiveParticles() + "<br><br><br>"
  315. + "Frame duration: " + scene.getLastFrameDuration() + " ms<br><br>"
  316. + "<i>Evaluate Active Meshes duration:</i> " + scene.getEvaluateActiveMeshesDuration() + " ms<br>"
  317. + "<i>Render Targets duration:</i> " + scene.getRenderTargetsDuration() + " ms<br>"
  318. + "<i>Particles duration:</i> " + scene.getParticlesDuration() + " ms<br>"
  319. + "<i>Sprites duration:</i> " + scene.getSpritesDuration() + " ms<br>"
  320. + "<i>Render duration:</i> " + scene.getRenderDuration() + " ms";
  321. }
  322. // Streams
  323. if (scene.useDelayedTextureLoading) {
  324. var waiting = scene.getWaitingItemsCount();
  325. if (waiting > 0) {
  326. status.innerHTML = "Streaming items..." + waiting + " remaining";
  327. } else {
  328. status.innerHTML = "";
  329. }
  330. }
  331. }
  332. };
  333. // Launch render loop
  334. engine.runRenderLoop(renderFunction);
  335. // Resize
  336. window.addEventListener("resize", function () {
  337. engine.resize();
  338. });
  339. // Caps
  340. var caps = engine.getCaps();
  341. document.getElementById("extensions").innerHTML =
  342. "Max textures image units: <b>" + caps.maxTexturesImageUnits + "</b><br>" +
  343. "Max texture size: <b>" + caps.maxTextureSize + "</b><br>" +
  344. "Max cubemap texture size: <b>" + caps.maxCubemapTextureSize + "</b><br>" +
  345. "Max render texture size: <b>" + caps.maxRenderTextureSize + "</b><br>";
  346. // UI
  347. var panelIsClosed = true;
  348. var cameraPanelIsClosed = true;
  349. var aboutIsClosed = true;
  350. document.getElementById("clickableTag").addEventListener("click", function () {
  351. if (panelIsClosed) {
  352. panelIsClosed = false;
  353. controlPanel.style.webkitTransform = "translateY(0px)";
  354. controlPanel.style.transform = "translateY(0px)";
  355. } else {
  356. panelIsClosed = true;
  357. controlPanel.style.webkitTransform = "translateY(200px)";
  358. controlPanel.style.transform = "translateY(200px)";
  359. }
  360. });
  361. document.getElementById("cameraClickableTag").addEventListener("click", function () {
  362. if (cameraPanelIsClosed) {
  363. cameraPanelIsClosed = false;
  364. cameraPanel.style.webkitTransform = "translateX(0px)";
  365. cameraPanel.style.transform = "translateX(0px)";
  366. } else {
  367. cameraPanelIsClosed = true;
  368. cameraPanel.style.webkitTransform = "translateX(300px)";
  369. cameraPanel.style.transform = "translateX(300px)";
  370. }
  371. });
  372. document.getElementById("aboutLink").addEventListener("click", function () {
  373. if (aboutIsClosed) {
  374. aboutIsClosed = false;
  375. aboutPanel.style.webkitTransform = "translateX(0px)";
  376. aboutPanel.style.transform = "translateX(0px)";
  377. } else {
  378. aboutIsClosed = true;
  379. aboutPanel.style.webkitTransform = "translateX(-120%)";
  380. aboutPanel.style.transform = "translateX(-120%)";
  381. }
  382. });
  383. document.getElementById("notSupported").addEventListener("click", function () {
  384. document.getElementById("notSupported").className = "hidden";
  385. opacityMask.className = "hidden";
  386. });
  387. opacityMask.addEventListener("click", function () {
  388. document.getElementById("notSupported").className = "hidden";
  389. opacityMask.className = "hidden";
  390. });
  391. document.getElementById("aboutPanel").addEventListener("click", function (evt) {
  392. evt.cancelBubble = true;
  393. });
  394. document.getElementById("menuPanel").addEventListener("click", function (evt) {
  395. if (!aboutIsClosed) {
  396. aboutIsClosed = true;
  397. aboutPanel.style.webkitTransform = "translateX(-120%)";
  398. aboutPanel.style.transform = "translateX(-120%)";
  399. }
  400. });
  401. canvas.addEventListener("click", function (evt) {
  402. if (!panelIsClosed) {
  403. panelIsClosed = true;
  404. cameraPanelIsClosed = true;
  405. controlPanel.style.webkitTransform = "translateY(200px)";
  406. controlPanel.style.transform = "translateY(200px)";
  407. cameraPanel.style.webkitTransform = "translateX(300px)";
  408. cameraPanel.style.transform = "translateX(300px)";
  409. }
  410. if (evt.ctrlKey) {
  411. if (!scene)
  412. return;
  413. var pickResult = scene.pick(evt.clientX, evt.clientY);
  414. if (pickResult.hit) {
  415. status.innerHTML = "Selected object: " + pickResult.pickedMesh.name;
  416. // Animations
  417. scene.beginAnimation(pickResult.pickedMesh, 0, 100, true, 1.0);
  418. var material = pickResult.pickedMesh.material;
  419. if (material) {
  420. scene.beginAnimation(material, 0, 100, true, 1.0);
  421. }
  422. // Emit particles
  423. var particleSystem = new BABYLON.ParticleSystem("particles", 400, scene);
  424. particleSystem.particleTexture = new BABYLON.Texture("Assets/Flare.png", scene);
  425. particleSystem.minAngularSpeed = -0.5;
  426. particleSystem.maxAngularSpeed = 0.5;
  427. particleSystem.minSize = 0.1;
  428. particleSystem.maxSize = 0.5;
  429. particleSystem.minLifeTime = 0.5;
  430. particleSystem.maxLifeTime = 2.0;
  431. particleSystem.minEmitPower = 0.5;
  432. particleSystem.maxEmitPower = 1.0;
  433. particleSystem.emitter = pickResult.pickedPoint;
  434. particleSystem.emitRate = 400;
  435. particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;
  436. particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0);
  437. particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0);
  438. particleSystem.direction1 = new BABYLON.Vector3(-1, -1, -1);
  439. particleSystem.direction2 = new BABYLON.Vector3(1, 1, 1);
  440. particleSystem.color1 = new BABYLON.Color4(1, 0, 0, 1);
  441. particleSystem.color2 = new BABYLON.Color4(0, 1, 1, 1);
  442. particleSystem.gravity = new BABYLON.Vector3(0, -5, 0);
  443. particleSystem.disposeOnStop = true;
  444. particleSystem.targetStopDuration = 0.1;
  445. particleSystem.start();
  446. } else {
  447. status.innerHTML = "";
  448. }
  449. }
  450. });
  451. wireframe.addEventListener("change", function () {
  452. if (engine) {
  453. engine.forceWireframe = wireframe.checked;
  454. }
  455. });
  456. enableStats.addEventListener("change", function () {
  457. stats.className = enableStats.checked ? "" : "hidden";
  458. });
  459. fullscreen.addEventListener("click", function () {
  460. if (engine) {
  461. engine.switchFullscreen(true);
  462. }
  463. });
  464. touchCamera.addEventListener("click", function () {
  465. if (!scene) {
  466. return;
  467. }
  468. var camera = new BABYLON.TouchCamera("touchCamera", scene.activeCamera.position, scene);
  469. camera.rotation = scene.activeCamera.rotation.clone();
  470. camera.fov = scene.activeCamera.fov;
  471. camera.minZ = scene.activeCamera.minZ;
  472. camera.maxZ = scene.activeCamera.maxZ;
  473. camera.ellipsoid = scene.activeCamera.ellipsoid.clone();
  474. camera.checkCollisions = scene.activeCamera.checkCollisions;
  475. camera.applyGravity = scene.activeCamera.applyGravity;
  476. camera.speed = scene.activeCamera.speed;
  477. scene.activeCamera.detachControl(canvas);
  478. scene.activeCamera = camera;
  479. scene.activeCamera.attachControl(canvas);
  480. });
  481. deviceOrientationCamera.addEventListener("click", function () {
  482. if (!scene) {
  483. return;
  484. }
  485. var camera = new BABYLON.DeviceOrientationCamera("deviceOrientationCamera", scene.activeCamera.position, scene);
  486. camera.rotation = scene.activeCamera.rotation.clone();
  487. camera.fov = scene.activeCamera.fov;
  488. camera.minZ = scene.activeCamera.minZ;
  489. camera.maxZ = scene.activeCamera.maxZ;
  490. camera.ellipsoid = scene.activeCamera.ellipsoid.clone();
  491. camera.checkCollisions = scene.activeCamera.checkCollisions;
  492. camera.applyGravity = scene.activeCamera.applyGravity;
  493. camera.speed = scene.activeCamera.speed;
  494. scene.activeCamera.detachControl(canvas);
  495. scene.activeCamera = camera;
  496. scene.activeCamera.attachControl(canvas);
  497. });
  498. hardwareScalingLevel.addEventListener("change", function () {
  499. if (!engine)
  500. return;
  501. engine.setHardwareScalingLevel(hardwareScalingLevel.selectedIndex + 1);
  502. });
  503. collisions.addEventListener("change", function () {
  504. if (scene) {
  505. scene.collisionsEnabled = collisions.checked;
  506. }
  507. });
  508. toggleFxaa.addEventListener("click", function () {
  509. if (scene && scene.activeCamera) {
  510. if (scene.activeCamera.__fxaa_cookie) {
  511. scene.activeCamera.__fxaa_cookie.dispose(),
  512. scene.activeCamera.__fxaa_cookie = null;
  513. } else {
  514. scene.activeCamera.__fxaa_cookie = new BABYLON.FxaaPostProcess("fxaa", 1.0, scene.activeCamera);
  515. }
  516. }
  517. });
  518. toggleBandW.addEventListener("click", function () {
  519. if (scene && scene.activeCamera) {
  520. if (scene.activeCamera.__bandw_cookie) {
  521. scene.activeCamera.__bandw_cookie.dispose(),
  522. scene.activeCamera.__bandw_cookie = null;
  523. } else {
  524. scene.activeCamera.__bandw_cookie = new BABYLON.BlackAndWhitePostProcess("bandw", 1.0, scene.activeCamera);
  525. }
  526. }
  527. });
  528. toggleFsaa4.addEventListener("click", function () {
  529. if (scene && scene.activeCamera) {
  530. if (scene.activeCamera.__fsaa_cookie) {
  531. scene.activeCamera.__fsaa_cookie.dispose(),
  532. scene.activeCamera.__fsaa_cookie = null;
  533. } else {
  534. var fx = new BABYLON.PassPostProcess("fsaa", 2.0, scene.activeCamera);
  535. fx.renderTargetSamplingMode = BABYLON.TextureSamplingModes.BILINEAR;
  536. scene.activeCamera.__fsaa_cookie = fx;
  537. }
  538. }
  539. });
  540. // Cameras
  541. camerasList.addEventListener("change", function (ev) {
  542. scene.activeCamera.detachControl(canvas);
  543. scene.activeCamera = scene.cameras[camerasList.selectedIndex];
  544. scene.activeCamera.attachControl(canvas);
  545. });
  546. // Query string
  547. var queryString = window.location.search;
  548. if (queryString) {
  549. var query = queryString.replace("?", "");
  550. var index = parseInt(query);
  551. if (!isNaN(index)) {
  552. if (index >= demos.length) {
  553. itemClick(tests[index - demos.length])();
  554. } else {
  555. itemClick(demos[index])();
  556. }
  557. } else {
  558. for (index = 0; index < demos.length; index++) {
  559. if (demos[index].title === query) {
  560. itemClick(demos[index])();
  561. return;
  562. }
  563. }
  564. for (index = 0; index < tests.length; index++) {
  565. if (tests[index].title === query) {
  566. itemClick(tests[index])();
  567. return;
  568. }
  569. }
  570. }
  571. }
  572. };