|
@@ -78,7 +78,6 @@ function WebXRManager( renderer ) {
|
|
|
this.setDevice = function ( value ) {
|
|
|
|
|
|
if ( value !== undefined ) device = value;
|
|
|
- if ( value instanceof XRDevice ) gl.setCompatibleXRDevice( value );
|
|
|
|
|
|
};
|
|
|
|
|
@@ -99,6 +98,15 @@ function WebXRManager( renderer ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function onRequestFrameOfReference( value ) {
|
|
|
+
|
|
|
+ frameOfReference = value;
|
|
|
+
|
|
|
+ animation.setContext( session );
|
|
|
+ animation.start();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
this.setFramebufferScaleFactor = function ( value ) {
|
|
|
|
|
|
framebufferScaleFactor = value;
|
|
@@ -122,17 +130,9 @@ function WebXRManager( renderer ) {
|
|
|
session.addEventListener( 'selectend', onSessionEvent );
|
|
|
session.addEventListener( 'end', onSessionEnd );
|
|
|
|
|
|
- session.baseLayer = new XRWebGLLayer( session, gl, { framebufferScaleFactor: framebufferScaleFactor } );
|
|
|
- session.requestFrameOfReference( frameOfReferenceType ).then( function ( value ) {
|
|
|
-
|
|
|
- frameOfReference = value;
|
|
|
-
|
|
|
- renderer.setFramebuffer( session.baseLayer.framebuffer );
|
|
|
-
|
|
|
- animation.setContext( session );
|
|
|
- animation.start();
|
|
|
+ session.updateRenderState( { baseLayer: new XRWebGLLayer( session, gl ) } );
|
|
|
|
|
|
- } );
|
|
|
+ session.requestReferenceSpace( { type: 'stationary', subtype: 'eye-level' } ).then( onRequestFrameOfReference );
|
|
|
|
|
|
//
|
|
|
|
|
@@ -217,18 +217,22 @@ function WebXRManager( renderer ) {
|
|
|
|
|
|
function onAnimationFrame( time, frame ) {
|
|
|
|
|
|
- pose = frame.getDevicePose( frameOfReference );
|
|
|
+ let session = frame.session;
|
|
|
+
|
|
|
+ pose = frame.getViewerPose( frameOfReference );
|
|
|
|
|
|
if ( pose !== null ) {
|
|
|
|
|
|
- var layer = session.baseLayer;
|
|
|
- var views = frame.views;
|
|
|
+ var layer = session.renderState.baseLayer;
|
|
|
+ var views = pose.views;
|
|
|
+
|
|
|
+ renderer.setFramebuffer( session.renderState.baseLayer.framebuffer );
|
|
|
|
|
|
for ( var i = 0; i < views.length; i ++ ) {
|
|
|
|
|
|
var view = views[ i ];
|
|
|
var viewport = layer.getViewport( view );
|
|
|
- var viewMatrix = pose.getViewMatrix( view );
|
|
|
+ var viewMatrix = view.transform.inverse().matrix;
|
|
|
|
|
|
var camera = cameraVR.cameras[ i ];
|
|
|
camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
|
|
@@ -255,21 +259,12 @@ function WebXRManager( renderer ) {
|
|
|
|
|
|
if ( inputSource ) {
|
|
|
|
|
|
- var inputPose = frame.getInputPose( inputSource, frameOfReference );
|
|
|
+ var inputPose = frame.getPose( inputSource.targetRaySpace, frameOfReference );
|
|
|
|
|
|
if ( inputPose !== null ) {
|
|
|
|
|
|
- if ( 'targetRay' in inputPose ) {
|
|
|
-
|
|
|
- controller.matrix.elements = inputPose.targetRay.transformMatrix;
|
|
|
-
|
|
|
- } else if ( 'pointerMatrix' in inputPose ) {
|
|
|
-
|
|
|
- // DEPRECATED
|
|
|
-
|
|
|
- controller.matrix.elements = inputPose.pointerMatrix;
|
|
|
-
|
|
|
- }
|
|
|
+ let targetRay = new XRRay(inputPose.transform);
|
|
|
+ controller.matrix.elements = targetRay.matrix;
|
|
|
|
|
|
controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
|
|
|
controller.visible = true;
|