Browse Source

Fixed Collisions.

Fix was trivial, I guess for the moment they can stay.
alteredq 13 years ago
parent
commit
ea26fef013
3 changed files with 17 additions and 17 deletions
  1. 1 1
      build/Three.js
  2. 1 1
      build/custom/ThreeExtras.js
  3. 15 15
      src/extras/physics/Collisions.js

+ 1 - 1
build/Three.js

@@ -693,7 +693,7 @@ THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLoca
 f instanceof THREE.Face4&&(f=this.rayTriangle(b,l,n,t,e,this.collisionNormal,c.mesh),f<e&&(e=f,k=h,c.normal.copy(this.collisionNormal),c.normal.normalize()),f=this.rayTriangle(b,n,p,t,e,this.collisionNormal,c.mesh),f<e&&(e=f,k=h,c.normal.copy(this.collisionNormal),c.normal.normalize()))}return{dist:e,faceIndex:k}};
 THREE.CollisionSystem.prototype.rayTriangle=function(a,c,b,e,k,h,f){var l=THREE.CollisionSystem.__v1,n=THREE.CollisionSystem.__v2;h.set(0,0,0);l.sub(b,c);n.sub(e,b);h.cross(l,n);l=h.dot(a.direction);if(!(l<0))if(f.doubleSided||f.flipSided)h.multiplyScalar(-1),l*=-1;else return Number.MAX_VALUE;f=h.dot(c)-h.dot(a.origin);if(!(f<=0))return Number.MAX_VALUE;if(!(f>=l*k))return Number.MAX_VALUE;f/=l;l=THREE.CollisionSystem.__v3;l.copy(a.direction);l.multiplyScalar(f);l.addSelf(a.origin);Math.abs(h.x)>
 Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(a=l.y-c.y,h=b.y-c.y,k=e.y-c.y,l=l.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=l.x-c.x,h=b.x-c.x,k=e.x-c.x,l=l.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(h.y)>Math.abs(h.z)?(a=l.x-c.x,h=b.x-c.x,k=e.x-c.x,l=l.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=l.x-c.x,h=b.x-c.x,k=e.x-c.x,l=l.y-c.y,b=b.y-c.y,e=e.y-c.y);c=h*e-b*k;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-l*k)*c;if(!(e>=0))return Number.MAX_VALUE;c*=h*l-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return f};
-THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;THREE.Matrix4.makeInvert(c.matrixWorld,b);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e};
+THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;b.getInverse(c.matrixWorld);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e};
 THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,k=0,h=0,f=0,l=0,n=0,p=!0;b.origin.x<c.min.x?(e=c.min.x-b.origin.x,e/=b.direction.x,p=!1,f=-1):b.origin.x>c.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,p=!1,f=1);b.origin.y<c.min.y?(k=c.min.y-b.origin.y,k/=b.direction.y,p=!1,l=-1):b.origin.y>c.max.y&&(k=c.max.y-b.origin.y,k/=b.direction.y,
 p=!1,l=1);b.origin.z<c.min.z?(h=c.min.z-b.origin.z,h/=b.direction.z,p=!1,n=-1):b.origin.z>c.max.z&&(h=c.max.z-b.origin.z,h/=b.direction.z,p=!1,n=1);if(p)return-1;p=0;k>e&&(p=1,e=k);h>e&&(p=2,e=h);switch(p){case 0:l=b.origin.y+b.direction.y*e;if(l<c.min.y||l>c.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(b<c.min.z||b>c.max.z)return Number.MAX_VALUE;c.normal.set(f,0,0);break;case 1:f=b.origin.x+b.direction.x*e;if(f<c.min.x||f>c.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*
 e;if(b<c.min.z||b>c.max.z)return Number.MAX_VALUE;c.normal.set(0,l,0);break;case 2:f=b.origin.x+b.direction.x*e;if(f<c.min.x||f>c.max.x)return Number.MAX_VALUE;l=b.origin.y+b.direction.y*e;if(l<c.min.y||l>c.max.y)return Number.MAX_VALUE;c.normal.set(0,0,n)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE};

+ 1 - 1
build/custom/ThreeExtras.js

@@ -343,7 +343,7 @@ THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLoca
 f instanceof THREE.Face4&&(f=this.rayTriangle(b,k,l,n,e,this.collisionNormal,c.mesh),f<e&&(e=f,g=h,c.normal.copy(this.collisionNormal),c.normal.normalize()),f=this.rayTriangle(b,l,m,n,e,this.collisionNormal,c.mesh),f<e&&(e=f,g=h,c.normal.copy(this.collisionNormal),c.normal.normalize()))}return{dist:e,faceIndex:g}};
 THREE.CollisionSystem.prototype.rayTriangle=function(a,c,b,e,g,h,f){var k=THREE.CollisionSystem.__v1,l=THREE.CollisionSystem.__v2;h.set(0,0,0);k.sub(b,c);l.sub(e,b);h.cross(k,l);k=h.dot(a.direction);if(!(k<0))if(f.doubleSided||f.flipSided)h.multiplyScalar(-1),k*=-1;else return Number.MAX_VALUE;f=h.dot(c)-h.dot(a.origin);if(!(f<=0))return Number.MAX_VALUE;if(!(f>=k*g))return Number.MAX_VALUE;f/=k;k=THREE.CollisionSystem.__v3;k.copy(a.direction);k.multiplyScalar(f);k.addSelf(a.origin);Math.abs(h.x)>
 Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(a=k.y-c.y,h=b.y-c.y,g=e.y-c.y,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(h.y)>Math.abs(h.z)?(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y);c=h*e-b*g;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-k*g)*c;if(!(e>=0))return Number.MAX_VALUE;c*=h*k-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return f};
-THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;THREE.Matrix4.makeInvert(c.matrixWorld,b);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e};
+THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;b.getInverse(c.matrixWorld);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e};
 THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,g=0,h=0,f=0,k=0,l=0,m=!0;b.origin.x<c.min.x?(e=c.min.x-b.origin.x,e/=b.direction.x,m=!1,f=-1):b.origin.x>c.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,m=!1,f=1);b.origin.y<c.min.y?(g=c.min.y-b.origin.y,g/=b.direction.y,m=!1,k=-1):b.origin.y>c.max.y&&(g=c.max.y-b.origin.y,g/=b.direction.y,
 m=!1,k=1);b.origin.z<c.min.z?(h=c.min.z-b.origin.z,h/=b.direction.z,m=!1,l=-1):b.origin.z>c.max.z&&(h=c.max.z-b.origin.z,h/=b.direction.z,m=!1,l=1);if(m)return-1;m=0;g>e&&(m=1,e=g);h>e&&(m=2,e=h);switch(m){case 0:k=b.origin.y+b.direction.y*e;if(k<c.min.y||k>c.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(b<c.min.z||b>c.max.z)return Number.MAX_VALUE;c.normal.set(f,0,0);break;case 1:f=b.origin.x+b.direction.x*e;if(f<c.min.x||f>c.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*
 e;if(b<c.min.z||b>c.max.z)return Number.MAX_VALUE;c.normal.set(0,k,0);break;case 2:f=b.origin.x+b.direction.x*e;if(f<c.min.x||f>c.max.x)return Number.MAX_VALUE;k=b.origin.y+b.direction.y*e;if(k<c.min.y||k>c.max.y)return Number.MAX_VALUE;c.normal.set(0,0,l)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE};

+ 15 - 15
src/extras/physics/Collisions.js

@@ -162,13 +162,13 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
                 me.normal.normalize();
 
             }
-        
+
         }
-        
+
         else if (face instanceof THREE.Face4) {
-            
+
             var nd = this.rayTriangle( rt, p0, p1, p3, d, this.collisionNormal, me.mesh );
-            
+
             if( nd < d ) {
 
                 d = nd;
@@ -177,9 +177,9 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
                 me.normal.normalize();
 
             }
-            
+
             nd = this.rayTriangle( rt, p1, p2, p3, d, this.collisionNormal, me.mesh );
-            
+
             if( nd < d ) {
 
                 d = nd;
@@ -188,7 +188,7 @@ THREE.CollisionSystem.prototype.rayMesh = function( r, me ) {
                 me.normal.normalize();
 
             }
-            
+
         }
 
 	}
@@ -201,7 +201,7 @@ THREE.CollisionSystem.prototype.rayTriangle = function( ray, p0, p1, p2, mind, n
 
 	var e1 = THREE.CollisionSystem.__v1,
 		e2 = THREE.CollisionSystem.__v2;
-	
+
 	n.set( 0, 0, 0 );
 
 	// do not crash on quads, fail instead
@@ -212,18 +212,18 @@ THREE.CollisionSystem.prototype.rayTriangle = function( ray, p0, p1, p2, mind, n
 
 	var dot = n.dot( ray.direction );
 	if ( !( dot < 0 ) ) {
-		
+
 		if ( mesh.doubleSided || mesh.flipSided ) {
-		
+
 			n.multiplyScalar (-1.0);
 			dot *= -1.0;
-		
+
 		} else {
-			
+
 			return Number.MAX_VALUE;
-		
+
 		}
-	
+
 	}
 
 	var d = n.dot( p0 );
@@ -316,7 +316,7 @@ THREE.CollisionSystem.prototype.rayTriangle = function( ray, p0, p1, p2, mind, n
 THREE.CollisionSystem.prototype.makeRayLocal = function( ray, m ) {
 
 	var mt = THREE.CollisionSystem.__m;
-	THREE.Matrix4.makeInvert( m.matrixWorld, mt );
+	mt.getInverse( m.matrixWorld );
 
 	var rt = THREE.CollisionSystem.__r;
 	rt.origin.copy( ray.origin );