Bladeren bron

fixes for WebXRManagers caching of baseReferenceFrame and teleport example fix (#24058)

RICHΛRD ΛNΛYΛ 3 jaren geleden
bovenliggende
commit
dc839ffba5
2 gewijzigde bestanden met toevoegingen van 12 en 2 verwijderingen
  1. 2 2
      examples/webxr_vr_teleport.html
  2. 10 0
      src/renderers/webxr/WebXRManager.js

+ 2 - 2
examples/webxr_vr_teleport.html

@@ -36,7 +36,7 @@
 			let controller1, controller2;
 			let controllerGrip1, controllerGrip2;
 
-			let room, marker, floor;
+			let room, marker, floor, baseReferenceSpace;
 
 			let INTERSECTION;
 			const tempMatrix = new THREE.Matrix4();
@@ -84,6 +84,7 @@
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.outputEncoding = THREE.sRGBEncoding;
+				renderer.xr.addEventListener( 'sessionstart', () => { baseReferenceSpace = renderer.xr.getReferenceSpace(); } )
 				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 
@@ -105,7 +106,6 @@
 
 					if ( INTERSECTION ) {
 
-						const baseReferenceSpace = renderer.xr.getReferenceSpace();
 						const offsetPosition = { x: - INTERSECTION.x, y: - INTERSECTION.y, z: - INTERSECTION.z, w: 1 };
 						const offsetRotation = new THREE.Quaternion();
 						const transform = new XRRigidTransform( offsetPosition, offsetRotation );

+ 10 - 0
src/renderers/webxr/WebXRManager.js

@@ -131,6 +131,15 @@ class WebXRManager extends EventDispatcher {
 
 		function onSessionEnd() {
 
+			session.removeEventListener( 'select', onSessionEvent );
+			session.removeEventListener( 'selectstart', onSessionEvent );
+			session.removeEventListener( 'selectend', onSessionEvent );
+			session.removeEventListener( 'squeeze', onSessionEvent );
+			session.removeEventListener( 'squeezestart', onSessionEvent );
+			session.removeEventListener( 'squeezeend', onSessionEvent );
+			session.removeEventListener( 'end', onSessionEnd );
+			session.removeEventListener( 'inputsourceschange', onInputSourcesChange );
+
 			inputSourcesMap.forEach( function ( controller, inputSource ) {
 
 				if ( controller !== undefined ) {
@@ -321,6 +330,7 @@ class WebXRManager extends EventDispatcher {
 				// Set foveation to maximum.
 				this.setFoveation( 1.0 );
 
+				customReferenceSpace = null;
 				referenceSpace = await session.requestReferenceSpace( referenceSpaceType );
 
 				animation.setContext( session );