瀏覽代碼

clerify customRenderTargets vs outputRenderTarget on camera, send xr near/far depth to session

Trevor Baron 6 年之前
父節點
當前提交
0cfae09998

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

@@ -24,7 +24,7 @@
 - Added startAndReleaseDragOnPointerEvents property to pointerDragBehavior which can be set to false for custom drag triggering ([TrevorDev](https://github.com/TrevorDev))
 - Effect renderer to render one or multiple shader effects to a texture ([TrevorDev](https://github.com/TrevorDev))
 - Added url parameters to web request modifiers ([PierreLeBlond](https://github.com/PierreLeBlond))
-- WebXR updated to spec as of July 9th ([TrevorDev](https://github.com/TrevorDev))
+- WebXR updated to spec as of July 10th ([TrevorDev](https://github.com/TrevorDev))
 - WebXR webVR parity helpers (Vive, WMR, Oculus Rift) ([TrevorDev](https://github.com/TrevorDev))
 
 ### Engine

+ 2 - 2
src/Cameras/XR/webXRCamera.ts

@@ -21,7 +21,7 @@ export class WebXRCamera extends FreeCamera {
         super(name, Vector3.Zero(), scene);
 
         // Initial camera configuration
-        this.minZ = 0;
+        this.minZ = 0.1;
         this.rotationQuaternion = new Quaternion();
         this.cameraRigMode = Camera.RIG_MODE_CUSTOM;
         this.updateUpVectorFromRotation = true;
@@ -31,7 +31,7 @@ export class WebXRCamera extends FreeCamera {
     private _updateNumberOfRigCameras(viewCount = 1) {
         while (this.rigCameras.length < viewCount) {
             var newCamera = new TargetCamera("view: " + this.rigCameras.length, Vector3.Zero(), this.getScene());
-            newCamera.minZ = 0;
+            newCamera.minZ = 0.1;
             newCamera.parent = this;
             newCamera.rotationQuaternion = new Quaternion();
             newCamera.updateUpVectorFromRotation = true;

+ 1 - 1
src/Cameras/XR/webXRExperienceHelper.ts

@@ -123,7 +123,7 @@ export class WebXRExperienceHelper implements IDisposable {
         }).then(() => {
             return outputCanvas.initializeXRLayerAsync(this.sessionManager.session);
         }).then(() => {
-            return this.sessionManager.updateRenderStateAsync({baseLayer: outputCanvas.xrLayer});
+            return this.sessionManager.updateRenderStateAsync({depthFar: this.camera.maxZ, depthNear: this.camera.minZ, baseLayer: outputCanvas.xrLayer!});
         }).then(() => {
             return this.sessionManager.startRenderingToXRAsync();
         }).then(() => {

+ 1 - 1
src/Cameras/XR/webXRSessionManager.ts

@@ -102,7 +102,7 @@ export class WebXRSessionManager implements IDisposable {
      * @param state state to set
      * @returns a promise that resolves once the render state has been updated
      */
-    public updateRenderStateAsync(state: any) {
+    public updateRenderStateAsync(state: XRRenderState) {
         if (state.baseLayer) {
             this.baseLayer = state.baseLayer;
         }

+ 5 - 1
src/Cameras/camera.ts

@@ -230,11 +230,15 @@ export class Camera extends Node {
     /**
      * Defines the list of custom render target which are rendered to and then used as the input to this camera's render. Eg. display another camera view on a TV in the main scene
      * This is pretty helpfull if you wish to make a camera render to a texture you could reuse somewhere
-     * else in the scene.
+     * else in the scene. (Eg. security camera)
+     *
+     * To change the final output target of the camera, camera.outputRenderTarget should be used instead (eg. webXR renders to a render target corrisponding to an HMD)
      */
     public customRenderTargets = new Array<RenderTargetTexture>();
     /**
      * When set, the camera will render to this render target instead of the default canvas
+     *
+     * If the desire is to use the output of a camera as a texture in the scene consider using camera.customRenderTargets instead
      */
     public outputRenderTarget: Nullable<RenderTargetTexture> = null;
 

+ 5 - 5
src/LibDeclarations/webxr.d.ts

@@ -40,10 +40,10 @@ interface XRSpace extends EventTarget {
 }
 
 interface XRRenderState {
-    depthNear: number ;
-    depthFar: number ;
-    inlineVerticalFieldOfView: number | undefined;
-    baseLayer: XRWebGLLayer | undefined;
+    depthNear?: number;
+    depthFar?: number;
+    inlineVerticalFieldOfView?: number;
+    baseLayer?: XRWebGLLayer;
 }
 
 interface XRInputSource {
@@ -58,7 +58,7 @@ interface XRInputSource {
 interface XRSession {
     addEventListener: Function;
     requestReferenceSpace(type: XRReferenceSpaceType): Promise<XRReferenceSpace>;
-    updateRenderState(XRRenderStateInit: any): Promise<void>;
+    updateRenderState(XRRenderStateInit: XRRenderState): Promise<void>;
     requestAnimationFrame: Function;
     end(): Promise<void>;
     renderState: XRRenderState;