ray-plane-intersection
Version:
whether a picking ray intersects with a plane
25 lines (21 loc) • 582 B
JavaScript
var dot = require('gl-vec3/dot')
var add = require('gl-vec3/add')
var scale = require('gl-vec3/scale')
var copy = require('gl-vec3/copy')
module.exports = intersectRayPlane
var v0 = [0, 0, 0]
function intersectRayPlane(out, origin, direction, normal, dist) {
var denom = dot(direction, normal)
if (denom !== 0) {
var t = -(dot(origin, normal) + dist) / denom
if (t < 0) {
return null
}
scale(v0, direction, t)
return add(out, origin, v0)
} else if (dot(normal, origin) + dist === 0) {
return copy(out, origin)
} else {
return null
}
}