Jelajahi Sumber

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 11 tahun lalu
induk
melakukan
e1342fabc6
1 mengubah file dengan 10 tambahan dan 13 penghapusan
  1. 10 13
      examples/js/controls/VRControls.js

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

@@ -5,6 +5,11 @@
 THREE.VRControls = function ( camera, done ) {
 THREE.VRControls = function ( camera, done ) {
 
 
 	this._camera = camera;
 	this._camera = camera;
+	this._vrState = {
+		hmd : {
+			orientation: new THREE.Quaternion()
+		}
+	};
 
 
 	this._init = function () {
 	this._init = function () {
 		var self = this;
 		var self = this;
@@ -49,28 +54,20 @@ THREE.VRControls = function ( camera, done ) {
 		}
 		}
 		// Applies head rotation from sensors data.
 		// Applies head rotation from sensors data.
 		if ( camera ) {
 		if ( camera ) {
-			camera.quaternion.fromArray( vrState.hmd.rotation );
+			camera.quaternion.copy( vrState.hmd.orientation );
 		}
 		}
 	};
 	};
 
 
 	this.getVRState = function() {
 	this.getVRState = function() {
 		var vrInput = this._vrInput;
 		var vrInput = this._vrInput;
+		var vrState = this._vrState;
 		var orientation;
 		var orientation;
-		var vrState;
 		if ( !vrInput ) {
 		if ( !vrInput ) {
 			return null;
 			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;
 		return vrState;
 	};
 	};
 
 

粤ICP备19079148号