Browse Source

WebVR/WebXR: Passing frameOfReference regardless of WebVR availability.

Mr.doob 7 years ago
parent
commit
3cda93f87c

+ 7 - 4
examples/js/vr/WebVR.js

@@ -9,8 +9,11 @@ var WEBVR = {
 
 	createButton: function ( renderer, options ) {
 
-		if ( options === undefined ) options = {};
-		if ( options.frameOfReferenceType === undefined ) options.frameOfReferenceType = 'stage';
+		if ( options && options.frameOfReferenceType ) {
+
+			renderer.vr.setFrameOfReferenceType( options.frameOfReference );
+
+		}
 
 		function showEnterVR( device ) {
 
@@ -31,7 +34,7 @@ var WEBVR = {
 
 			};
 
-			renderer.vr.setDevice( device, options );
+			renderer.vr.setDevice( device );
 
 		}
 
@@ -43,7 +46,7 @@ var WEBVR = {
 
 				session.addEventListener( 'end', onSessionEnded );
 
-				renderer.vr.setSession( session, options );
+				renderer.vr.setSession( session );
 				button.textContent = 'EXIT VR';
 
 				currentSession = session;

+ 7 - 3
src/renderers/webvr/WebVRManager.js

@@ -24,7 +24,7 @@ function WebVRManager( renderer ) {
 	var standingMatrix = new Matrix4();
 	var standingMatrixInverse = new Matrix4();
 
-	var options = { frameOfReferenceType: 'stage' };
+	var frameOfReferenceType = 'stage';
 
 	if ( typeof window !== 'undefined' && 'VRFrameData' in window ) {
 
@@ -207,6 +207,10 @@ function WebVRManager( renderer ) {
 
 		animation.setContext( _device );
 
+	this.setFrameOfReferenceType = function ( value ) {
+
+		frameOfReferenceType = value;
+
 	};
 
 	this.setPoseTarget = function ( object ) {
@@ -231,7 +235,7 @@ function WebVRManager( renderer ) {
 
 		//
 
-		if ( options.frameOfReferenceType === 'stage' ) {
+		if ( frameOfReferenceType === 'stage' ) {
 
 			var stageParameters = device.stageParameters;
 
@@ -293,7 +297,7 @@ function WebVRManager( renderer ) {
 
 		standingMatrixInverse.getInverse( standingMatrix );
 
-		if ( options.frameOfReferenceType === 'stage' ) {
+		if ( frameOfReferenceType === 'stage' ) {
 
 			cameraL.matrixWorldInverse.multiply( standingMatrixInverse );
 			cameraR.matrixWorldInverse.multiply( standingMatrixInverse );

+ 9 - 2
src/renderers/webvr/WebXRManager.js

@@ -16,6 +16,7 @@ function WebXRManager( renderer ) {
 	var session = null;
 
 	var frameOfRef = null;
+	var frameOfReferenceType = 'stage';
 
 	var pose = null;
 
@@ -94,7 +95,13 @@ function WebXRManager( renderer ) {
 
 	}
 
-	this.setSession = function ( _session, _options ) {
+	this.setFrameOfReferenceType = function ( value ) {
+
+		frameOfReferenceType = value;
+
+	};
+
+	this.setSession = function ( _session ) {
 
 		session = _session;
 
@@ -106,7 +113,7 @@ function WebXRManager( renderer ) {
 			session.addEventListener( 'end', onSessionEnd );
 
 			session.baseLayer = new XRWebGLLayer( session, gl );
-			session.requestFrameOfReference( _options.frameOfReferenceType ).then( function ( _frameOfRef ) {
+			session.requestFrameOfReference( frameOfReferenceType ).then( function ( _frameOfRef ) {
 
 				frameOfRef = _frameOfRef;