浏览代码

Handling case when the orientation of VR state is null. For some devices the information might not be available and the API will return null

Diego Marcos 10 年之前
父节点
当前提交
e1342fabc6
共有 1 个文件被更改,包括 10 次插入13 次删除
  1. 10 13
      examples/js/controls/VRControls.js

+ 10 - 13
examples/js/controls/VRControls.js

@@ -5,6 +5,11 @@
 THREE.VRControls = function ( camera, done ) {
 
 	this._camera = camera;
+	this._vrState = {
+		hmd : {
+			orientation: new THREE.Quaternion()
+		}
+	};
 
 	this._init = function () {
 		var self = this;
@@ -49,28 +54,20 @@ THREE.VRControls = function ( camera, done ) {
 		}
 		// Applies head rotation from sensors data.
 		if ( camera ) {
-			camera.quaternion.fromArray( vrState.hmd.rotation );
+			camera.quaternion.copy( vrState.hmd.orientation );
 		}
 	};
 
 	this.getVRState = function() {
 		var vrInput = this._vrInput;
+		var vrState = this._vrState;
 		var orientation;
-		var vrState;
 		if ( !vrInput ) {
 			return null;
 		}
-		orientation	= vrInput.getState().orientation;
-		vrState = {
-			hmd : {
-				rotation : [
-					orientation.x,
-					orientation.y,
-					orientation.z,
-					orientation.w
-				]
-			}
-		};
+		// If orientation is not available we return the identity quaternion (no rotation)
+		orientation = vrInput.getState().orientation || { x: 0, y: 0, z:0, w:1 };
+		vrState.hmd.orientation.set( orientation.x, orientation.y, orientation.z, orientation.w );
 		return vrState;
 	};