@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
25 lines (24 loc) • 654 B
JavaScript
;
import { Vector3 } from "three";
const _p = new Vector3();
const _d = new Vector3();
const _vn = new Vector3();
const _vn2 = new Vector3();
const MAX_STEPS = 100;
const SURF_DIST = 0.01;
export function softBodyRayMarch(origin, dir, maxDist, distanceFunction) {
let totalDist = 0;
_p.copy(origin);
_vn.copy(dir).normalize();
_p.add(_vn2.copy(_vn).multiplyScalar(1 * SURF_DIST));
for (let i = 0; i < MAX_STEPS; i++) {
const dist = distanceFunction(_p);
totalDist += dist;
if (dist < SURF_DIST || totalDist > maxDist) {
break;
}
_d.copy(_vn).multiplyScalar(dist);
_p.add(_d);
}
return totalDist;
}