Sfoglia il codice sorgente

Merge pull request #5871 from TrevorDev/enterVR

onAfterEnterVR
David Catuhe 6 anni fa
parent
commit
1bbddaf5a0
2 ha cambiato i file con 23 aggiunte e 1 eliminazioni
  1. 1 0
      dist/preview release/what's new.md
  2. 22 1
      src/Cameras/VR/vrExperienceHelper.ts

+ 1 - 0
dist/preview release/what's new.md

@@ -107,6 +107,7 @@
 - Added option `multiMultiMaterials` to mesh.mergeMeshes ([danjpar](https://github.com/danjpar))
 - Expose fallback camera distortion metrics option in vrExperienceHelper ([TrevorDev](https://github.com/TrevorDev))
 - Add setColor method to boundingBoxGizmo ([TrevorDev](https://github.com/TrevorDev))
+- Add OnAfterEnteringVRObservable to webVRHelper ([TrevorDev](https://github.com/TrevorDev))
 
 ### OBJ Loader
 - Add color vertex support (not part of standard) ([brianzinn](https://github.com/brianzinn))

+ 22 - 1
src/Cameras/VR/vrExperienceHelper.ts

@@ -280,6 +280,16 @@ class VRExperienceHelperCameraGazer extends VRExperienceHelperGazer {
 }
 
 /**
+ * Event containing information after VR has been entered
+ */
+export class OnAfterEnteringVRObservableEvent {
+    /**
+     * If entering vr was successful
+     */
+    public success: boolean;
+}
+
+/**
  * Helps to quickly add VR support to an existing scene.
  * See http://doc.babylonjs.com/how_to/webvr_helper
  */
@@ -316,11 +326,16 @@ export class VRExperienceHelper {
     private _onVRRequestPresentComplete: (success: boolean) => void;
 
     /**
-     * Observable raised when entering VR.
+     * Observable raised right before entering VR.
      */
     public onEnteringVRObservable = new Observable<VRExperienceHelper>();
 
     /**
+     * Observable raised when entering VR has completed.
+     */
+    public onAfterEnteringVRObservable = new Observable<OnAfterEnteringVRObservableEvent>();
+
+    /**
      * Observable raised when exiting VR.
      */
     public onExitingVRObservable = new Observable<VRExperienceHelper>();
@@ -966,6 +981,9 @@ export class VRExperienceHelper {
         // If WebVR is supported and a headset is connected
         if (this._webVRready) {
             if (!this._webVRpresenting) {
+                this._scene.getEngine().onVRRequestPresentComplete.addOnce((result) => {
+                    this.onAfterEnteringVRObservable.notifyObservers({success: result});
+                });
                 this._webVRCamera.position = this._position;
                 this._scene.activeCamera = this._webVRCamera;
             }
@@ -978,6 +996,9 @@ export class VRExperienceHelper {
             this._scene.activeCamera = this._vrDeviceOrientationCamera;
             this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen);
             this.updateButtonVisibility();
+            this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(() => {
+                this.onAfterEnteringVRObservable.notifyObservers({success: true});
+            });
         }
 
         if (this._scene.activeCamera && this._canvas) {