diff --git a/examples/webvr_daydream.html b/examples/webvr_daydream.html
index 7f78b596d8145d08168b18f1417d5dd3e2b45739..c10e17d5f8ecbdd4c8ceffd8acfca481604809cd 100644
--- a/examples/webvr_daydream.html
+++ b/examples/webvr_daydream.html
@@ -40,6 +40,10 @@
var room;
+ var radius = 0.08;
+ var normal = new THREE.Vector3();
+ var relativeVelocity = new THREE.Vector3();
+
init();
animate();
@@ -74,7 +78,7 @@
light.position.set( 1, 1, 1 ).normalize();
scene.add( light );
- var geometry = new THREE.IcosahedronBufferGeometry( 0.08, 2 );
+ var geometry = new THREE.IcosahedronBufferGeometry( radius, 2 );
for ( var i = 0; i < 200; i ++ ) {
@@ -162,7 +166,7 @@
// keep cubes inside room
- var range = 3 - 0.08;
+ var range = 3 - radius;
for ( var i = 0; i < room.children.length; i ++ ) {
@@ -177,7 +181,7 @@
}
- if ( cube.position.y < - range ) {
+ if ( cube.position.y < - range || cube.position.y > range ) {
cube.position.y = Math.max( cube.position.y, - range );
@@ -194,6 +198,32 @@
}
+ for ( var j = i + 1; j < room.children.length; j ++ ) {
+
+ var cube2 = room.children[ j ];
+
+ normal.copy( cube.position ).sub( cube2.position );
+
+ if ( normal.length() < 2 * radius ) {
+
+ normal.multiplyScalar( 0.5 * normal.length() - radius );
+ cube.position.sub( normal );
+ cube2.position.add( normal );
+
+ normal.normalize();
+
+ relativeVelocity.copy( cube.userData.velocity ).sub( cube2.userData.velocity );
+ var dot = relativeVelocity.dot( normal );
+
+ normal = normal.multiplyScalar( dot );
+
+ cube.userData.velocity.sub( normal );
+ cube2.userData.velocity.add( normal );
+
+ }
+
+ }
+
cube.userData.velocity.y -= 0.00098;
}
diff --git a/examples/webvr_gearvr.html b/examples/webvr_gearvr.html
index 9b28ad80146b07e66279c0e2a80cb870992c59e7..f70d83793976de07d8751644189686aaa53a37c5 100644
--- a/examples/webvr_gearvr.html
+++ b/examples/webvr_gearvr.html
@@ -42,7 +42,7 @@
var controller;
var room;
-
+
var radius = 0.08;
var normal = new THREE.Vector3();
var relativeVelocity = new THREE.Vector3();
@@ -183,7 +183,7 @@
cube.position.copy( controller.position ).sub( room.position );
cube.userData.velocity.x = ( Math.random() - 0.5 ) * 0.02;
cube.userData.velocity.y = ( Math.random() - 0.5 ) * 0.02;
- cube.userData.velocity.z = ( Math.random() * 0.01 - 0.1 );
+ cube.userData.velocity.z = ( Math.random() * 0.02 - 0.1 );
cube.userData.velocity.applyQuaternion( controller.quaternion );
room.add( cube );
@@ -222,15 +222,15 @@
cube.userData.velocity.z = - cube.userData.velocity.z;
}
-
+
for ( var j = i + 1; j < room.children.length; j ++ ) {
-
+
var cube2 = room.children[ j ];
-
+
normal.copy( cube.position ).sub( cube2.position );
-
+
if ( normal.length() < 2 * radius ) {
-
+
normal.multiplyScalar( 0.5 * normal.length() - radius );
cube.position.sub( normal );
cube2.position.add( normal );
@@ -246,7 +246,7 @@
cube2.userData.velocity.add( normal );
}
-
+
}
cube.userData.velocity.y -= 0.00098;