浏览代码

WebXRManager: Refactored inputPose handling code.

Mr.doob 7 年之前
父节点
当前提交
62a05e4913
共有 1 个文件被更改,包括 21 次插入8 次删除
  1. 21 8
      src/renderers/webvr/WebXRManager.js

+ 21 - 8
src/renderers/webvr/WebXRManager.js

@@ -16,10 +16,11 @@ function WebXRManager( renderer ) {
 	var session = null;
 
 	var frameOfRef = null;
-	var inputSources = [];
 
 	var pose = null;
-	var controllers = {};
+
+	var controllers = [];
+	var inputSources = [];
 
 	function isPresenting() {
 
@@ -54,6 +55,7 @@ function WebXRManager( renderer ) {
 
 			controller = new Group();
 			controller.matrixAutoUpdate = false;
+			controller.visible = false;
 
 			controllers[ id ] = controller;
 
@@ -227,19 +229,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 );