diff --git a/src/physics/Collisions.js b/src/physics/Collisions.js index 08120660..5174f51e 100644 --- a/src/physics/Collisions.js +++ b/src/physics/Collisions.js @@ -1,28 +1,15 @@ -// Ray -//function Ray(org, dir) { -// this.origin = org || new THREE.Vector3(); -// // Make sure the direction is always normalized! -// this.direction = dir || new THREE.Vector3(1,0,0); -//} - -//Ray.prototype.intersectionPoint = function(t) { -// return this.origin.clone().addSelf(this.direction.multiplyScalar(t)); -//} - -// Parametric plane THREE.PlaneCollider = function(pt, nor){ this.point = pt; this.normal = nor; } -// Parametric sphere + THREE.SphereCollider = function(cen, rad){ this.center = cen; this.radius = rad; this.radiusSq = rad * rad; } -// Box (AABB or OOBB) THREE.BoxCollider = function(min, max){ this.min = min; this.max = max; @@ -34,7 +21,6 @@ THREE.MeshCollider = function(vertices, faces, normals, box) { this.faces = faces; this.normals = normals; this.box = box; - this.numFaces = this.faces.length; } @@ -45,8 +31,6 @@ THREE.CollisionSystem = function(){ THREE.Collisions = new THREE.CollisionSystem(); -// @params r Ray -// @returns Array of colliders with a field "distance" set (@see Collisions.rayCast for details), empty if not intersection THREE.CollisionSystem.prototype.rayCastAll = function(r) { r.direction.normalize(); var ld = 0; @@ -64,8 +48,6 @@ THREE.CollisionSystem.prototype.rayCastAll = function(r) { return this.hits; } -// @params r Ray -// @returns nearest collider found, with "distance" field set, or null if no intersection THREE.CollisionSystem.prototype.rayCastNearest = function(r){ var cs = this.rayCastAll(r); @@ -86,8 +68,6 @@ THREE.CollisionSystem.prototype.rayCastNearest = function(r){ return cs[i]; } -// @params r Ray, c any supported collider type -// @returns Number, distance to intersection, MAX_VALUE if no intersection and -1 if ray inside collider (where applicable) THREE.CollisionSystem.prototype.rayCast = function(r, c) { if(c instanceof THREE.PlaneCollider) return this.rayPlane(r, c); @@ -99,8 +79,6 @@ THREE.CollisionSystem.prototype.rayCast = function(r, c) { return this.rayBox(r, c.box); } -// @params r Ray, me CMesh -// @returns Number, distance to intersection or MAX_VALUE if no intersection THREE.CollisionSystem.prototype.rayMesh = function(r, me){ var rt = this.makeRayLocal(r, me.mesh); @@ -198,7 +176,6 @@ THREE.CollisionSystem.prototype.rayTriangle = function(r, p0, p1, p2, n, mind){ return t; } -// @params r Ray, m THREE.Mesh THREE.CollisionSystem.prototype.makeRayLocal = function(r, m){ var rt = new THREE.Ray(r.origin.clone(), r.direction.clone()); var mt = THREE.Matrix4.makeInvert( m.matrixWorld ); @@ -209,38 +186,21 @@ THREE.CollisionSystem.prototype.makeRayLocal = function(r, m){ return rt; } -// @params r Ray, s CBox -// @returns Number, distance to intersection, -1 if inside or MAX_VALUE if no intersection THREE.CollisionSystem.prototype.rayBox = function(r, ab){ - - // If Collider.dynamic = true (default) it will act as an OOBB, getting the transformation from a mesh it is attached to - // In this case it needs to have a 'mesh' field, which has a 'matrixWorld' field in turn (like in THREE.Mesh) var rt; if(ab.dynamic && ab.mesh && ab.mesh.matrixWorld) { - //if(ab.mesh.localRay) rt = ab.mesh.localRay; - //else rt = this.makeRayLocal(r, ab.mesh); } else { rt = new THREE.Ray(r.origin.clone(), r.direction.clone()); } - // If box is not marked as dynamic or mesh is not found, it works like a simple AABB - // and uses the originaly calculated bounding box (faster if object is static) - var xt = 0, yt = 0, zt = 0; var xn = 0, yn = 0, zn = 0; var ins = true; if(rt.origin.x < ab.min.x) { xt = ab.min.x - rt.origin.x; - /* If this and the similar lines below are uncommented, - * the function will return MAX_VALUE (i.e. no intersection) - * if the Ray.direction is too short to reach the AABB. - * - * Otherwise the Ray is considered infinite (but only forward) - * and returned is the distance from Ray.origin to intersection point. - */ //if(xt > r.direction.x) return return Number.MAX_VALUE; xt /= rt.direction.x; ins = false; @@ -322,9 +282,6 @@ THREE.CollisionSystem.prototype.rayBox = function(r, ab){ return t; } -// @params r Ray, s CSphere -// @returns Number, parametric distance or MAX_VALUE if no intersection -// #TBT THREE.CollisionSystem.prototype.rayPlane = function(r, p){ var t = r.direction.dot(p.normal); var d = p.point.dot(p.normal); @@ -338,13 +295,11 @@ THREE.CollisionSystem.prototype.rayPlane = function(r, p){ } -// @params r Ray, s CSphere -// @returns Number, parametric distance or MAX_VALUE if no intersection THREE.CollisionSystem.prototype.raySphere = function(r, s){ var e = s.center.clone().subSelf(r.origin); if(e.lengthSq < s.radiusSq) return -1; - var a = e.dot(r.direction.clone()); // Ray.direction must be unit vector! + var a = e.dot(r.direction.clone()); if(a <= 0) return Number.MAX_VALUE; var t = s.radiusSq - (e.lengthSq() - a * a);