UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

59 lines (56 loc) 1.45 kB
import { Vec3 } from '../math/vec3.js'; class Plane { constructor(normal = Vec3.UP, distance = 0){ this.normal = new Vec3(); this.normal.copy(normal); this.distance = distance; } clone() { const cstr = this.constructor; return new cstr().copy(this); } copy(src) { this.normal.copy(src.normal); this.distance = src.distance; return this; } intersectsLine(start, end, point) { const d = this.distance; const d0 = this.normal.dot(start) + d; const d1 = this.normal.dot(end) + d; const t = d0 / (d0 - d1); const intersects = t >= 0 && t <= 1; if (intersects && point) { point.lerp(start, end, t); } return intersects; } intersectsRay(ray, point) { const denominator = this.normal.dot(ray.direction); if (denominator === 0) { return false; } const t = -(this.normal.dot(ray.origin) + this.distance) / denominator; if (t >= 0 && point) { point.copy(ray.direction).mulScalar(t).add(ray.origin); } return t >= 0; } normalize() { const invLength = 1 / this.normal.length(); this.normal.mulScalar(invLength); this.distance *= invLength; return this; } set(nx, ny, nz, d) { this.normal.set(nx, ny, nz); this.distance = d; return this; } setFromPointNormal(point, normal) { this.normal.copy(normal); this.distance = -this.normal.dot(point); return this; } } export { Plane };