Browse Source

Revert getCamera() removal (#26350)

* Revert getCamera() removal.

* Updated webxr_vr_handinput_pressbutton screenshot.
mrdoob 2 years ago
parent
commit
fdef0f83ac

BIN
examples/screenshots/webxr_vr_handinput_pointerclick.jpg


BIN
examples/screenshots/webxr_vr_handinput_pointerdrag.jpg


BIN
examples/screenshots/webxr_vr_handinput_pressbutton.jpg


BIN
examples/screenshots/webxr_vr_rollercoaster.jpg


+ 7 - 4
examples/webxr_vr_handinput_pointerclick.html

@@ -254,9 +254,10 @@
 
 						const offset = entity.getComponent( OffsetFromCamera );
 						const object = entity.getComponent( Object3D ).object;
-						object.position.x = camera.position.x + offset.x;
-						object.position.y = camera.position.y + offset.y;
-						object.position.z = camera.position.z + offset.z;
+						const xrCamera = this.renderer.xr.getCamera();
+						object.position.x = xrCamera.position.x + offset.x;
+						object.position.y = xrCamera.position.y + offset.y;
+						object.position.z = xrCamera.position.z + offset.z;
 						entity.removeComponent( NeedCalibration );
 
 					}
@@ -320,7 +321,8 @@
 			renderer.useLegacyLights = false;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
-			renderer.xr.setUserCamera( camera );
+			renderer.xr.cameraAutoUpdate = false;
+
 			container.appendChild( renderer.domElement );
 
 			document.body.appendChild( VRButton.createButton( renderer ) );
@@ -515,6 +517,7 @@
 
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
+			renderer.xr.updateCamera( camera );
 			world.execute( delta, elapsedTime );
 			renderer.render( scene, camera );
 

+ 7 - 4
examples/webxr_vr_handinput_pointerdrag.html

@@ -310,9 +310,10 @@
 
 						const offset = entity.getComponent( OffsetFromCamera );
 						const object = entity.getComponent( Object3D ).object;
-						object.position.x = camera.position.x + offset.x;
-						object.position.y = camera.position.y + offset.y;
-						object.position.z = camera.position.z + offset.z;
+						const xrCamera = this.renderer.xr.getCamera();
+						object.position.x = xrCamera.position.x + offset.x;
+						object.position.y = xrCamera.position.y + offset.y;
+						object.position.z = xrCamera.position.z + offset.z;
 						entity.removeComponent( NeedCalibration );
 
 					}
@@ -423,7 +424,8 @@
 			renderer.useLegacyLights = false;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
-			renderer.xr.setUserCamera( camera );
+			renderer.xr.cameraAutoUpdate = false;
+
 			container.appendChild( renderer.domElement );
 
 			document.body.appendChild( VRButton.createButton( renderer ) );
@@ -593,6 +595,7 @@
 
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
+			renderer.xr.updateCamera( camera );
 			world.execute( delta, elapsedTime );
 			renderer.render( scene, camera );
 

+ 12 - 9
examples/webxr_vr_handinput_pressbutton.html

@@ -73,6 +73,11 @@
 				let buttonPressSound, buttonReleaseSound;
 				if ( this.renderer.xr.getSession() && ! this.soundAdded ) {
 
+					const xrCamera = this.renderer.xr.getCamera();
+
+					const listener = new THREE.AudioListener();
+					xrCamera.add( listener );
+
 					// create a global audio source
 					buttonPressSound = new THREE.Audio( listener );
 					buttonReleaseSound = new THREE.Audio( listener );
@@ -309,9 +314,10 @@
 
 						const offset = entity.getComponent( OffsetFromCamera );
 						const object = entity.getComponent( Object3D ).object;
-						object.position.x = camera.position.x + offset.x;
-						object.position.y = camera.position.y + offset.y;
-						object.position.z = camera.position.z + offset.z;
+						const xrCamera = this.renderer.xr.getCamera();
+						object.position.x = xrCamera.position.x + offset.x;
+						object.position.y = xrCamera.position.y + offset.y;
+						object.position.z = xrCamera.position.z + offset.z;
 						entity.removeComponent( NeedCalibration );
 
 					}
@@ -330,9 +336,7 @@
 
 		const world = new World();
 		const clock = new THREE.Clock();
-
 		let camera, scene, renderer;
-		let listener;
 
 		init();
 		animate();
@@ -359,9 +363,6 @@
 			camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 10 );
 			camera.position.set( 0, 1.2, 0.3 );
 
-			listener = new THREE.AudioListener();
-			camera.add( listener );
-
 			scene.add( new THREE.HemisphereLight( 0xcccccc, 0x999999, 3 ) );
 
 			const light = new THREE.DirectionalLight( 0xffffff, 3 );
@@ -380,7 +381,8 @@
 			renderer.useLegacyLights = false;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
-			renderer.xr.setUserCamera( camera );
+			renderer.xr.cameraAutoUpdate = false;
+
 			container.appendChild( renderer.domElement );
 
 			document.body.appendChild( VRButton.createButton( renderer ) );
@@ -572,6 +574,7 @@
 
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
+			renderer.xr.updateCamera( camera );
 			world.execute( delta, elapsedTime );
 			renderer.render( scene, camera );
 

+ 10 - 11
examples/webxr_vr_rollercoaster.html

@@ -35,6 +35,16 @@
 
 			let mesh, material, geometry;
 
+			const renderer = new THREE.WebGLRenderer( { antialias: true } );
+			renderer.setPixelRatio( window.devicePixelRatio );
+			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.useLegacyLights = false;
+			renderer.xr.enabled = true;
+			renderer.xr.setReferenceSpaceType( 'local' );
+			document.body.appendChild( renderer.domElement );
+
+			document.body.appendChild( VRButton.createButton( renderer ) );
+
 			//
 
 			const scene = new THREE.Scene();
@@ -179,17 +189,6 @@
 
 			//
 
-			const renderer = new THREE.WebGLRenderer( { antialias: true } );
-			renderer.setPixelRatio( window.devicePixelRatio );
-			renderer.setSize( window.innerWidth, window.innerHeight );
-			renderer.useLegacyLights = false;
-			renderer.xr.enabled = true;
-			renderer.xr.setReferenceSpaceType( 'local' );
-			renderer.xr.setUserCamera( camera );
-			document.body.appendChild( renderer.domElement );
-
-			document.body.appendChild( VRButton.createButton( renderer ) );
-
 			window.addEventListener( 'resize', onWindowResize );
 
 			function onWindowResize() {

+ 3 - 1
src/renderers/WebGLRenderer.js

@@ -1054,7 +1054,9 @@ class WebGLRenderer {
 
 			if ( xr.enabled === true && xr.isPresenting === true ) {
 
-				camera = xr.updateCameraXR( camera ); // use XR camera for rendering
+				if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
+
+				camera = xr.getCamera(); // use XR camera for rendering
 
 			}
 

+ 11 - 29
src/renderers/webxr/WebXRManager.js

@@ -42,8 +42,6 @@ class WebXRManager extends EventDispatcher {
 
 		//
 
-		let userCamera = null;
-
 		const cameraL = new PerspectiveCamera();
 		cameraL.layers.enable( 1 );
 		cameraL.viewport = new Vector4();
@@ -63,19 +61,11 @@ class WebXRManager extends EventDispatcher {
 
 		//
 
-		this.cameraAutoUpdate = true; // @deprecated, r153
+		this.cameraAutoUpdate = true;
 		this.enabled = false;
 
 		this.isPresenting = false;
 
-		this.getCamera = function () {}; // @deprecated, r153
-
-		this.setUserCamera = function ( value ) {
-
-			userCamera = value;
-
-		};
-
 		this.getController = function ( index ) {
 
 			let controller = controllers[ index ];
@@ -512,15 +502,9 @@ class WebXRManager extends EventDispatcher {
 
 		}
 
-		this.updateCameraXR = function ( camera ) {
+		this.updateCamera = function ( camera ) {
 
-			if ( session === null ) return camera;
-
-			if ( userCamera ) {
-
-				camera = userCamera;
-
-			}
+			if ( session === null ) return;
 
 			cameraXR.near = cameraR.near = cameraL.near = camera.near;
 			cameraXR.far = cameraR.far = cameraL.far = camera.far;
@@ -566,19 +550,11 @@ class WebXRManager extends EventDispatcher {
 
 			// update user camera and its children
 
-			if ( userCamera ) {
-
-				updateUserCamera( cameraXR, parent );
-
-			}
-
-			return cameraXR;
+			updateUserCamera( camera, cameraXR, parent );
 
 		};
 
-		function updateUserCamera( cameraXR, parent ) {
-
-			const camera = userCamera;
+		function updateUserCamera( camera, cameraXR, parent ) {
 
 			if ( parent === null ) {
 
@@ -615,6 +591,12 @@ class WebXRManager extends EventDispatcher {
 
 		}
 
+		this.getCamera = function () {
+
+			return cameraXR;
+
+		};
+
 		this.getFoveation = function () {
 
 			if ( glProjLayer === null && glBaseLayer === null ) {