From 63f7f8b0bc17795364fa72d34cd6ac7d71203cbe Mon Sep 17 00:00:00 2001 From: Paul Masson Date: Tue, 8 May 2018 13:54:35 -0700 Subject: [PATCH] Add collision handling --- examples/webvr_gearvr.html | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/examples/webvr_gearvr.html b/examples/webvr_gearvr.html index 5b03ed81d3..bd617229fd 100644 --- a/examples/webvr_gearvr.html +++ b/examples/webvr_gearvr.html @@ -42,6 +42,10 @@ var controller; var room; + + var radius = 0.08; + var normal = new THREE.Vector3(); + var relativeVelocity = new THREE.Vector3(); init(); animate(); @@ -77,7 +81,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 ++ ) { @@ -187,7 +191,7 @@ // keep cubes inside room - var range = 3 - 0.08; + var range = 3 - radius; for ( var i = 0; i < room.children.length; i ++ ) { @@ -218,6 +222,28 @@ 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.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; -- GitLab