webXRDefaultExperience.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import {WebXRExperienceHelper} from "./webXRExperienceHelper"
  2. import { Scene } from 'scene';
  3. import { WebXRInput } from './webXRInput';
  4. import { WebXRControllerModelLoader } from './webXRControllerModelLoader';
  5. import { WebXRControllerPointerSelection } from './webXRControllerPointerSelection';
  6. import { WebXRControllerTeleportation } from './webXRControllerTeleportation';
  7. import { WebXRManagedOutputCanvas } from './webXRManagedOutputCanvas';
  8. import { WebXREnterExitUI } from './webXREnterExitUI';
  9. import { AbstractMesh } from '../../Meshes/abstractMesh';
  10. export class WebXRDefaultExperienceOptions {
  11. floorMeshes: Array<AbstractMesh>
  12. }
  13. export class WebXRDefaultExperience {
  14. public baseExperience:WebXRExperienceHelper;
  15. public input:WebXRInput;
  16. public controllerModelLoader:WebXRControllerModelLoader;
  17. public pointerSelection:WebXRControllerPointerSelection;
  18. public teleportation:WebXRControllerTeleportation;
  19. public enterExitUI:WebXREnterExitUI
  20. public outputCanvas:WebXRManagedOutputCanvas
  21. public static CreateAsync(scene:Scene, options:WebXRDefaultExperienceOptions){
  22. var result = new WebXRDefaultExperience();
  23. // Create base experience
  24. return WebXRExperienceHelper.CreateAsync(scene).then((xrHelper)=>{
  25. result.baseExperience = xrHelper;
  26. // Add controller support
  27. result.input = new WebXRInput(xrHelper);
  28. result.controllerModelLoader = new WebXRControllerModelLoader(result.input);
  29. result.pointerSelection = new WebXRControllerPointerSelection(result.input);
  30. result.teleportation = new WebXRControllerTeleportation(result.input, options.floorMeshes);
  31. // Create output canvas manager (this controls where the xr frames will be rendered)
  32. result.outputCanvas = new WebXRManagedOutputCanvas(xrHelper, scene.getEngine().getRenderingCanvas() as HTMLCanvasElement);
  33. // Create ui for entering/exiting xr
  34. return WebXREnterExitUI.CreateAsync(scene, result.baseExperience, {webXRManagedOutputCanvas: result.outputCanvas})
  35. }).then((ui)=>{
  36. result.enterExitUI = ui;
  37. return result
  38. })
  39. }
  40. constructor(){
  41. }
  42. public dispose(){
  43. }
  44. }