浏览代码

Merge pull request #13445 from mrdoob/3dof-controllers

Improved 3DOF controllers examples.
Mr.doob 7 年之前
父节点
当前提交
8aa9b58f6c
共有 4 个文件被更改,包括 62 次插入16 次删除
  1. 10 1
      examples/js/vr/DaydreamController.js
  2. 10 1
      examples/js/vr/GearVRController.js
  3. 26 12
      examples/webvr_daydream.html
  4. 16 2
      examples/webvr_gearvr.html

+ 10 - 1
examples/js/vr/DaydreamController.js

@@ -42,7 +42,7 @@ THREE.DaydreamController = function () {
 
 	};
 
-	this.getTouchPadState = function () {
+	this.getTouchpadState = function () {
 
 		return touchpadIsPressed;
 
@@ -103,6 +103,15 @@ THREE.DaydreamController = function () {
 
 	};
 
+	// DEPRECATED
+
+	this.getTouchPadState = function () {
+
+		console.warn( 'THREE.DaydreamController: getTouchPadState() is now getTouchpadState()' );
+		return touchpadIsPressed;
+
+	};
+
 };
 
 THREE.DaydreamController.prototype = Object.create( THREE.Object3D.prototype );

+ 10 - 1
examples/js/vr/GearVRController.js

@@ -60,7 +60,7 @@ THREE.GearVRController = function () {
 
 	};
 
-	this.getTouchPadState = function () {
+	this.getTouchpadState = function () {
 
 		return touchpadIsPressed;
 
@@ -131,6 +131,15 @@ THREE.GearVRController = function () {
 
 	};
 
+	// DEPRECATED
+
+	this.getTouchPadState = function () {
+
+		console.warn( 'THREE.GearVRController: getTouchPadState() is now getTouchpadState()' );
+		return touchpadIsPressed;
+
+	};
+
 };
 
 THREE.GearVRController.prototype = Object.create( THREE.Object3D.prototype );

+ 26 - 12
examples/webvr_daydream.html

@@ -32,7 +32,7 @@
 
 			var container;
 			var camera, scene, ray, raycaster, renderer;
-			var gamepad;
+			var controller;
 
 			var room;
 
@@ -121,19 +121,19 @@
 
 				//
 
-				gamepad = new THREE.DaydreamController();
-				gamepad.position.set( 0.25, - 0.5, 0 );
-				scene.add( gamepad );
+				controller = new THREE.DaydreamController();
+				controller.position.set( 0.25, - 0.5, 0 );
+				scene.add( controller );
 
 				//
 
-				var gamepadHelper = new THREE.Line( new THREE.BufferGeometry(), new THREE.LineBasicMaterial( { linewidth: 4 } ) );
-				gamepadHelper.geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 0, - 10 ], 3 ) );
-				gamepad.add( gamepadHelper );
+				var controllerHelper = new THREE.Line( new THREE.BufferGeometry(), new THREE.LineBasicMaterial( { linewidth: 4 } ) );
+				controllerHelper.geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 0, - 10 ], 3 ) );
+				controller.add( controllerHelper );
 
 				renderer.domElement.addEventListener( 'click', function ( event ) {
 
-					gamepadHelper.material.color.setHex( Math.random() * 0xffffff );
+					controllerHelper.material.color.setHex( Math.random() * 0xffffff );
 
 				} );
 
@@ -162,14 +162,28 @@
 
 			function render() {
 
-				gamepad.update();
-
 				var delta = clock.getDelta() * 60;
 
+				controller.update();
+
+				if ( controller.getTouchpadState() === true ) {
+
+					var cube = room.children[ 0 ];
+					room.remove( cube );
+
+					cube.position.copy( controller.position );
+					cube.userData.velocity.x = ( Math.random() - 0.5 ) * 0.02 * delta;
+					cube.userData.velocity.y = ( Math.random() - 0.5 ) * 0.02 * delta;
+					cube.userData.velocity.z = ( Math.random() * 0.01 - 0.05 ) * delta;
+					cube.userData.velocity.applyQuaternion( controller.quaternion );
+					room.add( cube );
+
+				}
+
 				// find intersections
 
-				raycaster.ray.origin.copy( gamepad.position );
-				raycaster.ray.direction.set( 0, 0, - 1 ).applyQuaternion( gamepad.quaternion );
+				raycaster.ray.origin.copy( controller.position );
+				raycaster.ray.direction.set( 0, 0, - 1 ).applyQuaternion( controller.quaternion );
 
 				var intersects = raycaster.intersectObjects( room.children );
 

+ 16 - 2
examples/webvr_gearvr.html

@@ -178,10 +178,24 @@
 
 			function render() {
 
-				var delta = clock.getDelta() * 60;
-
 				controller.update();
 
+				if ( controller.getTouchpadState() === true ) {
+
+					var cube = room.children[ 0 ];
+					room.remove( cube );
+
+					cube.position.copy( controller.position );
+					cube.userData.velocity.x = ( Math.random() - 0.5 ) * 0.02 * delta;
+					cube.userData.velocity.y = ( Math.random() - 0.5 ) * 0.02 * delta;
+					cube.userData.velocity.z = ( Math.random() * 0.01 - 0.05 ) * delta;
+					cube.userData.velocity.applyQuaternion( controller.quaternion );
+					room.add( cube );
+
+				}
+
+				var delta = clock.getDelta() * 60;
+
 				for ( var i = 0; i < room.children.length; i ++ ) {
 
 					var cube = room.children[ i ];