sceneManager.ts 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import { Helper } from "../../../commons/helper";
  2. import { assert, expect, should } from "../viewerReference";
  3. import { DefaultViewer, AbstractViewer, Version, viewerManager } from "../../../../src";
  4. export let name = "scene manager";
  5. describe(name, function() {
  6. it("should be initialized when an engine is created", (done) => {
  7. let viewer = Helper.getNewViewerInstance();
  8. viewer.onEngineInitObservable.add(() => {
  9. assert.isDefined(viewer.sceneManager, "scene manager should be defined");
  10. });
  11. viewer.onInitDoneObservable.add(() => {
  12. viewer.dispose();
  13. done();
  14. });
  15. });
  16. it("should have objects initialized after init", (done) => {
  17. let viewer = Helper.getNewViewerInstance();
  18. viewer.onInitDoneObservable.add(() => {
  19. assert.isDefined(viewer.sceneManager.scene);
  20. assert.isDefined(viewer.sceneManager.labs);
  21. assert.isDefined(viewer.sceneManager.scene.animationPropertiesOverride);
  22. assert.isDefined(viewer.sceneManager.camera);
  23. assert.isDefined(viewer.sceneManager.mainColor);
  24. assert.isDefined(viewer.sceneManager.reflectionColor);
  25. // default is white
  26. ["r", "g", "b"].forEach((l) => {
  27. assert.equal(viewer.sceneManager.mainColor[l], 1);
  28. assert.equal(viewer.sceneManager.reflectionColor[l], 1);
  29. });
  30. assert.isArray(viewer.sceneManager.models);
  31. assert.isEmpty(viewer.sceneManager.models);
  32. viewer.dispose();
  33. done();
  34. });
  35. });
  36. it("should set the default material to be PBR-Enabled per default", (done) => {
  37. let viewer = Helper.getNewViewerInstance();
  38. viewer.onInitDoneObservable.add(() => {
  39. assert.isTrue(viewer.sceneManager.scene.defaultMaterial instanceof BABYLON.PBRMaterial);
  40. viewer.dispose();
  41. done();
  42. });
  43. });
  44. it("should call observers correctly", (done) => {
  45. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  46. let sceneInitCalled = false;
  47. viewer.runRenderLoop = false;
  48. const s: string[] = [];
  49. viewer.onEngineInitObservable.add(() => {
  50. viewer.sceneManager.onSceneInitObservable.clear();
  51. viewer.sceneManager.onSceneInitObservable.add(() => {
  52. assert.isDefined(viewer.sceneManager.scene);
  53. assert.isUndefined(viewer.sceneManager.camera);
  54. sceneInitCalled = true;
  55. });
  56. let update = (str: string, data) => {
  57. if (s.indexOf(str) !== -1) {
  58. assert.fail(false, true, str + " observer already called");
  59. return false;
  60. } else {
  61. s.push(str);
  62. return true;
  63. }
  64. };
  65. viewer.sceneManager.onCameraConfiguredObservable.add(update.bind(null, "camera"));
  66. viewer.sceneManager.onLightsConfiguredObservable.add(update.bind(null, "light"));
  67. viewer.sceneManager.onEnvironmentConfiguredObservable.add(update.bind(null, "env"));
  68. viewer.sceneManager.onSceneConfiguredObservable.add(update.bind(null, "scene"));
  69. viewer.sceneManager.onSceneOptimizerConfiguredObservable.add(update.bind(null, "optimizer"));
  70. });
  71. viewer.onInitDoneObservable.add(() => {
  72. viewer.updateConfiguration({
  73. scene: {},
  74. optimizer: false,
  75. skybox: false
  76. });
  77. assert.isTrue(sceneInitCalled);
  78. assert.lengthOf(s, 5);
  79. viewer.dispose();
  80. done();
  81. });
  82. });
  83. it("should delete and rebuild post process pipeline when enabled and disabled", (done) => {
  84. let viewer = Helper.getNewViewerInstance(undefined, {
  85. scene: {
  86. imageProcessingConfiguration: {
  87. isEnabled: true
  88. }
  89. },
  90. lab: {
  91. defaultRenderingPipelines: true
  92. }
  93. });
  94. viewer.onEngineInitObservable.add(() => {
  95. viewer.runRenderLoop = false;
  96. viewer.sceneManager.onSceneInitObservable.clear();
  97. viewer.sceneManager.onSceneInitObservable.add((scene) => {
  98. viewer.onSceneInitObservable.notifyObserversWithPromise(scene);
  99. });
  100. });
  101. viewer.onInitDoneObservable.add(() => {
  102. assert.isDefined(viewer.sceneManager.defaultRenderingPipeline);
  103. assert.isTrue(viewer.sceneManager.defaultRenderingPipelineEnabled);
  104. viewer.sceneManager.defaultRenderingPipelineEnabled = false;
  105. assert.isNull(viewer.sceneManager.defaultRenderingPipeline);
  106. assert.isFalse(viewer.sceneManager.defaultRenderingPipelineEnabled);
  107. assert.isFalse(viewer.sceneManager.scene.imageProcessingConfiguration.applyByPostProcess);
  108. viewer.sceneManager.defaultRenderingPipelineEnabled = true;
  109. assert.isDefined(viewer.sceneManager.defaultRenderingPipeline);
  110. assert.isTrue(viewer.sceneManager.defaultRenderingPipelineEnabled);
  111. assert.isTrue(viewer.sceneManager.scene.imageProcessingConfiguration.applyByPostProcess);
  112. viewer.dispose();
  113. done();
  114. });
  115. });
  116. it("should allow disabling and enabling ground", (done) => {
  117. let viewer = Helper.getNewViewerInstance(undefined, {
  118. ground: true
  119. });
  120. viewer.onInitDoneObservable.add(() => {
  121. if (!viewer.sceneManager.environmentHelper) {
  122. assert.fail();
  123. viewer.dispose();
  124. done();
  125. return;
  126. }
  127. // ground should be defined, and mirror should be enabled
  128. assert.isDefined(viewer.sceneManager.environmentHelper.ground);
  129. viewer.sceneManager.groundEnabled = false;
  130. assert.isFalse(viewer.sceneManager.environmentHelper.ground!.isEnabled());
  131. viewer.sceneManager.groundEnabled = true;
  132. assert.isTrue(viewer.sceneManager.environmentHelper.ground!.isEnabled());
  133. viewer.updateConfiguration({
  134. ground: false
  135. });
  136. assert.isUndefined(viewer.sceneManager.environmentHelper);
  137. assert.isTrue(viewer.sceneManager.groundEnabled);
  138. viewer.dispose();
  139. done();
  140. });
  141. });
  142. it("should allow disabling and enabling ground texture", (done) => {
  143. let viewer = Helper.getNewViewerInstance(undefined, {
  144. ground: {
  145. mirror: true
  146. }
  147. });
  148. viewer.onInitDoneObservable.add(() => {
  149. if (!viewer.sceneManager.environmentHelper) {
  150. assert.fail();
  151. viewer.dispose();
  152. done();
  153. return;
  154. }
  155. // ground should be defined, and mirror should be enabled
  156. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial);
  157. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial!.reflectionTexture);
  158. viewer.sceneManager.groundMirrorEnabled = false;
  159. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial);
  160. assert.isNotOk(viewer.sceneManager.environmentHelper.groundMaterial!.reflectionTexture);
  161. viewer.sceneManager.groundMirrorEnabled = true;
  162. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial);
  163. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial!.reflectionTexture);
  164. viewer.updateConfiguration({
  165. ground: {
  166. mirror: false
  167. }
  168. });
  169. assert.isDefined(viewer.sceneManager.environmentHelper.groundMaterial);
  170. assert.isNotOk(viewer.sceneManager.environmentHelper.groundMaterial!.reflectionTexture);
  171. assert.isTrue(viewer.sceneManager.groundMirrorEnabled);
  172. viewer.dispose();
  173. done();
  174. });
  175. });
  176. });