trip.three
Version:
Three.js addon for Trip
27 lines (22 loc) • 703 B
JavaScript
;
var THREE = require('three');
var rayFromWorldAndCamera = require('./rayFromWorldAndCamera');
module.exports = function (worldPos, origin, normal, camera) {
var ray = rayFromWorldAndCamera(worldPos, camera);
// http://en.wikipedia.org/wiki/Line-plane_intersection
var p0 = origin;
var l0 = ray.origin;
var l = ray.direction;
var n = normal;
var num = new THREE.Vector3().subVectors(p0, l0).dot(n);
var den = l.dot(n);
if (Math.abs(num) < 1e-6) {
// In plane
return worldPos.clone();
} else if (Math.abs(den) < 1e-6) {
return undefined;
} else {
var d = num / den;
return new THREE.Vector3().addVectors(l0, l.clone().multiplyScalar(d));
}
};