|
@@ -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}};
|
|
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)>
|
|
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};
|
|
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,
|
|
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*
|
|
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};
|
|
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};
|