UNPKG

ray-3d

Version:

a high-level ray picking helper for 3D intersection

60 lines (48 loc) 1.62 kB
var intersectRayTriangle = require('ray-triangle-intersection') var intersectRayPlane = require('ray-plane-intersection') var intersectRaySphere = require('ray-sphere-intersection') var intersectRayBox = require('ray-aabb-intersection') var copy3 = require('gl-vec3/copy') var tmpTriangle = [ [0, 0, 0], [0, 0, 0], [0, 0, 0] ] var tmp3 = [0, 0, 0] module.exports = Ray function Ray (origin, direction) { this.origin = origin || [ 0, 0, 0 ] this.direction = direction || [ 0, 0, -1 ] } Ray.prototype.set = function (origin, direction) { this.origin = origin this.direction = direction } Ray.prototype.copy = function (other) { copy3(this.origin, other.origin) copy3(this.direction, other.direction) } Ray.prototype.clone = function () { var other = new Ray() other.copy(this) return other } Ray.prototype.intersectsSphere = function (center, radius) { return intersectRaySphere(tmp3, this.origin, this.direction, center, radius) } Ray.prototype.intersectsPlane = function (normal, distance) { return intersectRayPlane(tmp3, this.origin, this.direction, normal, distance) } Ray.prototype.intersectsTriangle = function (triangle) { return intersectRayTriangle(tmp3, this.origin, this.direction, triangle) } Ray.prototype.intersectsBox = function (aabb) { return intersectRayBox(tmp3, this.origin, this.direction, aabb) } Ray.prototype.intersectsTriangleCell = function (cell, positions) { var a = cell[0], b = cell[1], c = cell[2] tmpTriangle[0] = positions[a] tmpTriangle[1] = positions[b] tmpTriangle[2] = positions[c] return this.intersectsTriangle(tmpTriangle) }