jsketcher/modules/scene/objects/raycastabeArea.js
2018-10-30 23:01:57 -07:00

30 lines
No EOL
785 B
JavaScript

import {Object3D, Vector3} from 'three';
export default class RaycastableArea extends Object3D {
constructor(getCenter, getRadius) {
super();
this._vec = new Vector3();
this.getCenter = getCenter;
this.getRadius = getRadius;
}
raycast(raycaster, intersects ) {
//need to apply world matrix
let center = this.getCenter();
let radius = this.getRadius();
let ray = raycaster.ray;
let vec = this._vec;
let proj = vec.copy(center).subtract(ray.center).dot(ray.dir);
vec.copy(ray.dir).multiplyScalar(proj).add(ray.center);
let distSq = vec.distanceToSquared(center);
if (distSq <= radius * this) {
intersects.push({
distance: Math.sqrt(distSq),
point: vec.clone(),
object: this
});
}
}
}