Browse Source

Fix for Face4 rayMesh (rayTriangle typo). RaycastNearest resturns index of face in addition to distance.

Nik Van den Wijngaert 14 years ago
parent
commit
0738d0c078
1 changed files with 12 additions and 7 deletions
  1. 12 7
      src/extras/physics/Collisions.js

+ 12 - 7
src/extras/physics/Collisions.js

@@ -101,11 +101,12 @@ THREE.CollisionSystem.prototype.rayCastNearest = function( ray ) {
 
 	while( cs[ i ] instanceof THREE.MeshCollider ) {
 
-		var d = this.rayMesh( ray, cs[ i ] );
+        var dist_index = this.rayMesh ( ray, cs[ i ] );
 
-		if( d < Number.MAX_VALUE ) {
+		if( dist_index.dist < Number.MAX_VALUE ) {
 
-			cs[ i ].distance = d;
+			cs[ i ].distance = dist_index.dist;
+            cs[ i ].faceIndex = dist_index.faceIndex;
 			break;
 
 		}
@@ -141,12 +142,13 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
 	var rt = this.makeRayLocal( r, me.mesh );
 
 	var d = Number.MAX_VALUE;
+    var nearestface;
 
 	for( var i = 0; i < me.numFaces; i++ ) {
         var face = me.mesh.geometry.faces[i];
-		var p0 = me.mesh.geometry.vertices[ face.a ].position;
-		var p1 = me.mesh.geometry.vertices[ face.b ].position;
-		var p2 = me.mesh.geometry.vertices[ face.c ].position;
+        var p0 = me.mesh.geometry.vertices[ face.a ].position;
+        var p1 = me.mesh.geometry.vertices[ face.b ].position;
+        var p2 = me.mesh.geometry.vertices[ face.c ].position;
         var p3 = face instanceof THREE.Face4 ? me.mesh.geometry.vertices[ face.d ].position : null;
 
         if (face instanceof THREE.Face3) {
@@ -155,6 +157,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
             if( nd < d ) {
 
                 d = nd;
+                nearestface = i;
                 me.normal.copy( this.collisionNormal );
                 me.normal.normalize();
 
@@ -169,6 +172,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
             if( nd < d ) {
 
                 d = nd;
+                nearestface = i;
                 me.normal.copy( this.collisionNormal );
                 me.normal.normalize();
 
@@ -179,6 +183,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
             if( nd < d ) {
 
                 d = nd;
+                nearestface = i;
                 me.normal.copy( this.collisionNormal );
                 me.normal.normalize();
 
@@ -188,7 +193,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
 
 	}
 
-	return d;
+	return {dist: d, faceIndex: nearestface};
 
 };