Ver Fonte

Add controller matrix polyfill and viewMatrix

Morgan Villedieu há 6 anos atrás
pai
commit
1acd3d897f
2 ficheiros alterados com 36 adições e 31 exclusões
  1. 34 5
      examples/js/vr/Polyfill.js
  2. 2 26
      src/renderers/webvr/WebXRManager.js

+ 34 - 5
examples/js/vr/Polyfill.js

@@ -2,7 +2,7 @@
 
 
 if( 'xr' in navigator ) {
 if( 'xr' in navigator ) {
 
 
-	console.log('Helio: Chrome m73 WebXR Polyfill:', navigator.xr);
+	console.log('Helio - (Chrome m73) WebXR Polyfill', navigator.xr);
 
 
 	// WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
 	// WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
 
 
@@ -10,12 +10,12 @@ if( 'xr' in navigator ) {
 
 
 	if( 'supportsSessionMode' in navigator.xr ) {
 	if( 'supportsSessionMode' in navigator.xr ) {
 
 
-		const temp = navigator.xr.requestSession.bind(navigator.xr);
+		const tempRequestSession = navigator.xr.requestSession.bind(navigator.xr);
 
 
 		navigator.xr.requestSession = function (sessionType) {
 		navigator.xr.requestSession = function (sessionType) {
 
 
 			return new Promise((resolve, reject) => {
 			return new Promise((resolve, reject) => {
-				temp({ mode: sessionType })
+				tempRequestSession({ mode: sessionType })
 					.then(session => {
 					.then(session => {
 
 
 						// WebXRManager - xrFrame.getPose() Polyfill - line 279
 						// WebXRManager - xrFrame.getPose() Polyfill - line 279
@@ -26,11 +26,40 @@ if( 'xr' in navigator ) {
 
 
 							return tempRequestAnimationFrame(function (time, frame) {
 							return tempRequestAnimationFrame(function (time, frame) {
 
 
+								// WebXRManager - xrFrame.getViewerPose() Polyfill - line 279
+								// Transforms view.viewMatrix to view.transform.inverse.matrix
+
+								const tempGetViewerPose = frame.getViewerPose.bind(frame);
+
+								frame.getViewerPose = function ( referenceSpace ) {
+
+									const pose = tempGetViewerPose( referenceSpace );
+
+									pose.views.forEach(view => {
+
+										view.transform = {
+											inverse: {
+												matrix: view.viewMatrix
+											}
+										}
+
+									})
+
+									return pose;
+
+								}
+
+								// WebXRManager - xrFrame.getPose() Polyfill - line 259
+
 								frame.getPose = function (targetRaySpace, referenceSpace) {
 								frame.getPose = function (targetRaySpace, referenceSpace) {
 
 
-									console.log('targetRay', targetRaySpace)
+									const inputPose = frame.getInputPose(targetRaySpace, referenceSpace);
+
+									inputPose.transform = {
+										matrix: inputPose.targetRay.transformMatrix
+									}
 
 
-									return frame.getInputPose(targetRaySpace, referenceSpace);
+									return inputPose;
 
 
 								}
 								}
 
 

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

@@ -227,17 +227,7 @@ function WebXRManager( renderer ) {
 
 
 				var viewMatrix;
 				var viewMatrix;
 
 
-				if ( 'transform ' in view ) {
-
-					viewMatrix = view.transform.inverse.matrix;
-
-				} else {
-
-					// DEPRECATED
-
-					viewMatrix = view.viewMatrix;
-
-				}
+				viewMatrix = view.transform.inverse.matrix;
 
 
 				var camera = cameraVR.cameras[ i ];
 				var camera = cameraVR.cameras[ i ];
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
@@ -270,21 +260,7 @@ function WebXRManager( renderer ) {
 
 
 				if ( inputPose !== null ) {
 				if ( inputPose !== null ) {
 
 
-					if ( 'transform' in inputPose ) {
-
-						controller.matrix.fromArray( inputPose.transform.matrix );
-
-					} else if ( 'targetRay' in inputPose ) {
-
-						controller.matrix.elements = inputPose.targetRay.transformMatrix;
-
-					} else if ( 'pointerMatrix' in inputPose ) {
-
-						// DEPRECATED
-
-						controller.matrix.elements = inputPose.pointerMatrix;
-
-					}
+					controller.matrix.fromArray( inputPose.transform.matrix );
 
 
 					controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 					controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 					controller.visible = true;
 					controller.visible = true;