UNPKG

trip.three

Version:
27 lines (22 loc) 703 B
'use strict'; 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)); } };