Bläddra i källkod

WebXRManager: Updated to last version of the WebXR API.

Mr.doob 6 år sedan
förälder
incheckning
c4190122a7

+ 3 - 5
examples/js/vr/WebVR.js

@@ -81,7 +81,7 @@ var WEBVR = {
 
 				if ( currentSession === null ) {
 
-					navigator.xr.requestSession( { mode: 'immersive-vr' } ).then( onSessionStarted );
+					navigator.xr.requestSession( 'immersive-vr' ).then( onSessionStarted );
 
 				} else {
 
@@ -91,8 +91,6 @@ var WEBVR = {
 
 			};
 
-			if ( device ) renderer.vr.setDevice( device );
-
 		}
 
 		function showVRNotFound() {
@@ -131,14 +129,14 @@ var WEBVR = {
 
 		}
 
-		if ( 'xr' in navigator && 'requestDevice' in navigator.xr ) {
+		if ( 'xr' in navigator && 'supportsSession' in navigator.xr ) {
 
 			var button = document.createElement( 'button' );
 			button.style.display = 'none';
 
 			stylizeElement( button );
 
-			navigator.xr.supportsSessionMode( 'immersive-vr' ).then( showEnterXR );
+			navigator.xr.supportsSession( 'immersive-vr' ).then( showEnterXR );
 
 			return button;
 

+ 1 - 1
src/renderers/WebGLRenderer.js

@@ -311,7 +311,7 @@ function WebGLRenderer( parameters ) {
 
 	// vr
 
-	var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'requestDevice' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
+	var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator && 'supportsSession' in navigator.xr ) ? new WebXRManager( _this ) : new WebVRManager( _this );
 
 	this.vr = vr;
 

+ 33 - 29
src/renderers/webvr/WebXRManager.js

@@ -14,13 +14,12 @@ function WebXRManager( renderer ) {
 
 	var gl = renderer.context;
 
-	var device = null;
 	var session = null;
 
 	var framebufferScaleFactor = 1.0;
 
-	var frameOfReference = null;
-	var frameOfReferenceType = 'stage';
+	var referenceSpace = null;
+	var referenceSpaceType = 'local-floor';
 
 	var pose = null;
 
@@ -29,7 +28,7 @@ function WebXRManager( renderer ) {
 
 	function isPresenting() {
 
-		return session !== null && frameOfReference !== null;
+		return session !== null && referenceSpace !== null;
 
 	}
 
@@ -69,24 +68,19 @@ function WebXRManager( renderer ) {
 
 	};
 
-	this.getDevice = function () {
-
-		return device;
-
-	};
+	//
 
-	this.setDevice = function ( value ) {
+	function onSessionEvent( event ) {
 
-		if ( value !== undefined ) device = value;
+		for ( var i = 0; i < controllers.length; i ++ ) {
 
-	};
+			if ( inputSources[ i ] === event.inputSource ) {
 
-	//
+				controllers[ i ].dispatchEvent( { type: event.type } );
 
-	function onSessionEvent( event ) {
+			}
 
-		var controller = controllers[ inputSources.indexOf( event.inputSource ) ];
-		if ( controller ) controller.dispatchEvent( { type: event.type } );
+		}
 
 	}
 
@@ -98,9 +92,9 @@ function WebXRManager( renderer ) {
 
 	}
 
-	function onRequestFrameOfReference( value ) {
+	function onRequestReferenceSpace( value ) {
 
-		frameOfReference = value;
+		referenceSpace = value;
 
 		animation.setContext( session );
 		animation.start();
@@ -113,9 +107,9 @@ function WebXRManager( renderer ) {
 
 	};
 
-	this.setFrameOfReferenceType = function ( value ) {
+	this.setReferenceSpaceType = function ( value ) {
 
-		frameOfReferenceType = value;
+		referenceSpaceType = value;
 
 	};
 
@@ -132,15 +126,15 @@ function WebXRManager( renderer ) {
 
 			session.updateRenderState( { baseLayer: new XRWebGLLayer( session, gl ) } );
 
-			session.requestReferenceSpace( { type: 'stationary', subtype: 'eye-level' } ).then( onRequestFrameOfReference );
+			session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );
 
 			//
 
-			inputSources = session.getInputSources();
+			inputSources = session.inputSources;
 
 			session.addEventListener( 'inputsourceschange', function () {
 
-				inputSources = session.getInputSources();
+				inputSources = session.inputSources;
 				console.log( inputSources );
 
 				for ( var i = 0; i < controllers.length; i ++ ) {
@@ -217,7 +211,7 @@ function WebXRManager( renderer ) {
 
 	function onAnimationFrame( time, frame ) {
 
-		pose = frame.getViewerPose( frameOfReference );
+		pose = frame.getViewerPose( referenceSpace );
 
 		if ( pose !== null ) {
 
@@ -230,7 +224,7 @@ function WebXRManager( renderer ) {
 
 				var view = views[ i ];
 				var viewport = layer.getViewport( view );
-				var viewMatrix = view.transform.inverse().matrix;
+				var viewMatrix = view.transform.inverse.matrix;
 
 				var camera = cameraVR.cameras[ i ];
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
@@ -257,13 +251,11 @@ function WebXRManager( renderer ) {
 
 			if ( inputSource ) {
 
-				var inputPose = frame.getPose( inputSource.targetRaySpace, frameOfReference );
+				var inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
 
 				if ( inputPose !== null ) {
 
-					var targetRay = new XRRay( inputPose.transform );
-					controller.matrix.elements = targetRay.matrix;
-
+					controller.matrix.fromArray( inputPose.transform.matrix );
 					controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 					controller.visible = true;
 
@@ -301,6 +293,18 @@ function WebXRManager( renderer ) {
 
 	};
 
+	this.getDevice = function () {
+
+		console.warn( 'THREE.WebXRManager: getDevice() has been deprecated.' );
+
+	};
+
+	this.setDevice = function () {
+
+		console.warn( 'THREE.WebXRManager: setDevice() has been deprecated.' );
+
+	};
+
 	this.submitFrame = function () {};
 
 }

+ 0 - 1
utils/build/externs.js

@@ -6,4 +6,3 @@ var performance;
 var createImageBitmap;
 var WebGL2RenderingContext;
 var XRWebGLLayer;
-var XRRay;