提交 93f0618d 编写于 作者: M Mr.doob

Updated builds.

上级 62a05e49
......@@ -21417,6 +21417,7 @@
var poseTarget = null;
var controllers = [];
var standingMatrix = new Matrix4();
var standingMatrixInverse = new Matrix4();
......@@ -21480,13 +21481,108 @@
//
var isTriggerPressed = false;
function findGamepad( id ) {
var gamepads = navigator.getGamepads && navigator.getGamepads();
for ( var i = 0, j = 0, l = gamepads.length; i < l; i ++ ) {
var gamepad = gamepads[ i ];
if ( gamepad && ( gamepad.id === 'Daydream Controller' ||
gamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller' ||
gamepad.id === 'OpenVR Gamepad' || gamepad.id.startsWith( 'Oculus Touch' ) ||
gamepad.id.startsWith( 'Spatial Controller' ) ) ) {
if ( j === id ) return gamepad;
j ++;
}
}
}
function updateControllers() {
for ( var i = 0; i < controllers.length; i ++ ) {
var controller = controllers[ i ];
var gamepad = findGamepad( i );
if ( gamepad !== undefined && gamepad.pose !== undefined ) {
if ( gamepad.pose === null ) return;
// Pose
var pose = gamepad.pose;
if ( pose.hasPosition === false ) controller.position.set( 0.2, - 0.6, - 0.05 );
if ( pose.position !== null ) controller.position.fromArray( pose.position );
if ( pose.orientation !== null ) controller.quaternion.fromArray( pose.orientation );
controller.matrix.compose( controller.position, controller.quaternion, controller.scale );
controller.matrix.premultiply( standingMatrix );
controller.matrix.decompose( controller.position, controller.quaternion, controller.scale );
controller.matrixWorldNeedsUpdate = true;
controller.visible = true;
// Trigger
var buttonId = gamepad.id === 'Daydream Controller' ? 0 : 1;
if ( isTriggerPressed !== gamepad.buttons[ buttonId ].pressed ) {
isTriggerPressed = gamepad.buttons[ buttonId ].pressed;
if ( isTriggerPressed ) {
controller.dispatchEvent( { type: 'selectstart' } );
} else {
controller.dispatchEvent( { type: 'selectend' } );
controller.dispatchEvent( { type: 'select' } );
}
}
} else {
controller.visible = false;
}
}
}
//
this.enabled = false;
this.userHeight = 1.6;
this.getController = function ( id ) {
console.warn( 'WebVRManager: getController() not yet implemented.' );
return new Group();
var controller = controllers[ id ];
if ( controller === undefined ) {
controller = new Group();
controller.matrixAutoUpdate = false;
controller.visible = false;
controllers[ id ] = controller;
}
return controller;
};
......@@ -21628,6 +21724,8 @@
}
updateControllers();
return cameraVR;
};
......@@ -21680,10 +21778,11 @@
var session = null;
var frameOfRef = null;
var inputSources = [];
var pose = null;
var controllers = {};
var controllers = [];
var inputSources = [];
function isPresenting() {
......@@ -21718,6 +21817,7 @@
controller = new Group();
controller.matrixAutoUpdate = false;
controller.visible = false;
controllers[ id ] = controller;
......@@ -21891,19 +21991,30 @@
//
for ( var i = 0; i < inputSources.length; i ++ ) {
for ( var i = 0; i < controllers.length; i ++ ) {
var controller = controllers[ i ];
var inputSource = inputSources[ i ];
var inputPose = frame.getInputPose( inputSource, frameOfRef );
if ( inputPose !== null && controllers[ i ] ) {
if ( inputSource ) {
var inputPose = frame.getInputPose( inputSource, frameOfRef );
var controller = controllers[ i ];
controller.matrix.elements = inputPose.gripMatrix;
controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
if ( inputPose !== null ) {
controller.matrix.elements = inputPose.gripMatrix;
controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
controller.visible = true;
continue;
}
}
controller.visible = false;
}
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
此差异已折叠。
......@@ -21411,6 +21411,7 @@ function WebVRManager( renderer ) {
var poseTarget = null;
var controllers = [];
var standingMatrix = new Matrix4();
var standingMatrixInverse = new Matrix4();
......@@ -21474,13 +21475,108 @@ function WebVRManager( renderer ) {
//
var isTriggerPressed = false;
function findGamepad( id ) {
var gamepads = navigator.getGamepads && navigator.getGamepads();
for ( var i = 0, j = 0, l = gamepads.length; i < l; i ++ ) {
var gamepad = gamepads[ i ];
if ( gamepad && ( gamepad.id === 'Daydream Controller' ||
gamepad.id === 'Gear VR Controller' || gamepad.id === 'Oculus Go Controller' ||
gamepad.id === 'OpenVR Gamepad' || gamepad.id.startsWith( 'Oculus Touch' ) ||
gamepad.id.startsWith( 'Spatial Controller' ) ) ) {
if ( j === id ) return gamepad;
j ++;
}
}
}
function updateControllers() {
for ( var i = 0; i < controllers.length; i ++ ) {
var controller = controllers[ i ];
var gamepad = findGamepad( i );
if ( gamepad !== undefined && gamepad.pose !== undefined ) {
if ( gamepad.pose === null ) return;
// Pose
var pose = gamepad.pose;
if ( pose.hasPosition === false ) controller.position.set( 0.2, - 0.6, - 0.05 );
if ( pose.position !== null ) controller.position.fromArray( pose.position );
if ( pose.orientation !== null ) controller.quaternion.fromArray( pose.orientation );
controller.matrix.compose( controller.position, controller.quaternion, controller.scale );
controller.matrix.premultiply( standingMatrix );
controller.matrix.decompose( controller.position, controller.quaternion, controller.scale );
controller.matrixWorldNeedsUpdate = true;
controller.visible = true;
// Trigger
var buttonId = gamepad.id === 'Daydream Controller' ? 0 : 1;
if ( isTriggerPressed !== gamepad.buttons[ buttonId ].pressed ) {
isTriggerPressed = gamepad.buttons[ buttonId ].pressed;
if ( isTriggerPressed ) {
controller.dispatchEvent( { type: 'selectstart' } );
} else {
controller.dispatchEvent( { type: 'selectend' } );
controller.dispatchEvent( { type: 'select' } );
}
}
} else {
controller.visible = false;
}
}
}
//
this.enabled = false;
this.userHeight = 1.6;
this.getController = function ( id ) {
console.warn( 'WebVRManager: getController() not yet implemented.' );
return new Group();
var controller = controllers[ id ];
if ( controller === undefined ) {
controller = new Group();
controller.matrixAutoUpdate = false;
controller.visible = false;
controllers[ id ] = controller;
}
return controller;
};
......@@ -21622,6 +21718,8 @@ function WebVRManager( renderer ) {
}
updateControllers();
return cameraVR;
};
......@@ -21674,10 +21772,11 @@ function WebXRManager( renderer ) {
var session = null;
var frameOfRef = null;
var inputSources = [];
var pose = null;
var controllers = {};
var controllers = [];
var inputSources = [];
function isPresenting() {
......@@ -21712,6 +21811,7 @@ function WebXRManager( renderer ) {
controller = new Group();
controller.matrixAutoUpdate = false;
controller.visible = false;
controllers[ id ] = controller;
......@@ -21885,19 +21985,30 @@ function WebXRManager( renderer ) {
//
for ( var i = 0; i < inputSources.length; i ++ ) {
for ( var i = 0; i < controllers.length; i ++ ) {
var controller = controllers[ i ];
var inputSource = inputSources[ i ];
var inputPose = frame.getInputPose( inputSource, frameOfRef );
if ( inputPose !== null && controllers[ i ] ) {
if ( inputSource ) {
var inputPose = frame.getInputPose( inputSource, frameOfRef );
var controller = controllers[ i ];
controller.matrix.elements = inputPose.gripMatrix;
controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
if ( inputPose !== null ) {
controller.matrix.elements = inputPose.gripMatrix;
controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
controller.visible = true;
continue;
}
}
controller.visible = false;
}
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册