From 8ab742ca2cd1bb8a93df3acb9970fab1481477d8 Mon Sep 17 00:00:00 2001 From: Bartek Drozdz Date: Wed, 13 Apr 2011 12:16:13 +0200 Subject: [PATCH] Added normal to returned collider for mesh collider tests --- .gitignore | 1 + src/extras/physics/CollisionUtils.js | 2 +- src/extras/physics/Collisions.js | 15 +++++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index f31b3e29..e51fad33 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store *.swp +.project diff --git a/src/extras/physics/CollisionUtils.js b/src/extras/physics/CollisionUtils.js index cbc99447..5d1ba38c 100644 --- a/src/extras/physics/CollisionUtils.js +++ b/src/extras/physics/CollisionUtils.js @@ -1,5 +1,5 @@ /** - * @author drojdjou / http://everyday3d.com/ + * @author bartek drozdz / http://everyday3d.com/ */ THREE.CollisionUtils = {}; diff --git a/src/extras/physics/Collisions.js b/src/extras/physics/Collisions.js index 64bc9c6e..5d355b09 100644 --- a/src/extras/physics/Collisions.js +++ b/src/extras/physics/Collisions.js @@ -1,5 +1,5 @@ /** - * @author drojdjou / http://everyday3d.com/ + * @author bartek drozdz / http://everyday3d.com/ */ THREE.PlaneCollider = function( point, normal ) { @@ -38,6 +38,7 @@ THREE.MeshCollider = function( vertices, faces, normals, box ) { THREE.CollisionSystem = function() { + this.collisionNormal; this.colliders = []; this.hits = []; @@ -139,8 +140,12 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) { var p2 = me.vertices[ me.faces[ t + 2 ] ]; var n = me.normals[ me.faces[ i ] ]; - d = Math.min(d, this.rayTriangle( rt, p0, p1, p2, n, d ) ); - + var nd = this.rayTriangle( rt, p0, p1, p2, n, d ); + + if(nd < d) { + d = nd; + me.normal = this.collisionNormal; + } } return d; @@ -245,7 +250,9 @@ THREE.CollisionSystem.prototype.rayTriangle = function( ray, p0, p1, p2, n, mind var gamma = 1 - alpha - beta; if( !(gamma >= 0) ) return Number.MAX_VALUE; //console.log("gamma: " + gamma); - + + this.collisionNormal = n; + return t; };