Browse Source

Fix poseObject transform (#2)

* fix standing matrix application

* demonstrate setPoseTarget

* update build
Brian Peiris 7 years ago
parent
commit
59c50e7bac
2 changed files with 18 additions and 7 deletions
  1. 14 2
      examples/webvr_sandbox.html
  2. 4 5
      src/renderers/webvr/WebVRManager.js

+ 14 - 2
examples/webvr_sandbox.html

@@ -24,7 +24,7 @@
 
 		<script>
 
-			var camera, scene, renderer;
+			var box, camera, scene, renderer, poseTarget;
 
 			var reflector;
 
@@ -123,6 +123,15 @@
 				mesh.receiveShadow = true;
 				reflector.add( mesh );
 
+
+				box = new THREE.Mesh(new THREE.BoxGeometry());
+				var boxPivot = new THREE.Object3D();
+				boxPivot.add(box);
+				boxPivot.position.z = -3;
+				scene.add(boxPivot);
+
+				poseTarget = new THREE.Object3D();
+
 				//
 
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
@@ -131,6 +140,7 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.shadowMap.enabled = true;
 				renderer.vr.enabled = true;
+				renderer.vr.setPoseTarget(poseTarget);
 				document.body.appendChild( renderer.domElement );
 
 				document.body.appendChild( WEBVR.createButton( renderer ) );
@@ -138,7 +148,6 @@
 				//
 
 				window.addEventListener( 'resize', onWindowResize, false );
-
 			}
 
 			function onWindowResize() {
@@ -163,6 +172,9 @@
 				mesh.rotation.x = time * 2;
 				mesh.rotation.y = time * 5;
 
+				box.position.setFromMatrixPosition(poseTarget.matrixWorld);
+				box.quaternion.setFromRotationMatrix(poseTarget.matrixWorld);
+
 				renderer.render( scene, camera );
 
 			}

+ 4 - 5
src/renderers/webvr/WebVRManager.js

@@ -112,7 +112,7 @@ function WebVRManager( renderer ) {
 
 			poseObject.position.fromArray( pose.position );
 
-		} 
+		}
 
 		if ( pose.orientation !== null ) {
 
@@ -120,10 +120,8 @@ function WebVRManager( renderer ) {
 
 		}
 
-		poseObject.updateMatrixWorld();
-
 		var stageParameters = device.stageParameters;
-		
+
 		if (stageParameters) {
 		  standingMatrix.fromArray( stageParameters.sittingToStandingTransform );
 		} else {
@@ -131,7 +129,8 @@ function WebVRManager( renderer ) {
 		}
 
 		standingMatrixInverse.getInverse( standingMatrix );
-		poseObject.matrixWorld.multiply( standingMatrix );
+		poseObject.position.applyMatrix4( standingMatrix );
+		poseObject.updateMatrixWorld();
 		camera.matrixWorldInverse.multiply( standingMatrixInverse );
 
 		if ( device.isPresenting === false ) return camera;